Repository 32bit  Forum
Repository 64bit  Wiki

Modificare file hex

Postate qui per tutte le discussioni legate a Linux in generale.

Moderatore: Staff

Regole del forum
1) Citare sempre la versione di Slackware usata, la versione del Kernel e magari anche la versione della libreria coinvolta. Questi dati aiutano le persone che possono rispondere.
2) Per evitare confusione prego inserire in questo forum solo topic che riguardano appunto Gnu/Linux in genere, se l'argomento è specifico alla Slackware usate uno dei forum Slackware o Slackware64.
3) Leggere attentamente le risposte ricevute
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.

Modificare file hex

Messaggioda zosty » mer ago 01, 2012 14:38

Voglio modificare con un semplice script (senza scrivere un programma c...) un file in formato hex inserendo i corretti parametri prelevati da un altro file.

In particolare, il contenuto del file di partenza e' del tipo:
    ...
    :1000B000FA6A2D30E8300C0BF926BEEF04F0C6EFDB
    :1000C00004F0CAEF04F0CEEF04F0FA6A3E440E0BDF
    :1000D000F926000C030C050C0A0C1E0C3C0C780CC9
    :0400E000F00C12000E
    :0200E40000001A
    :100100003A26533A30FF000039FB873A06330000A5
    :100110003A02FF3A0DA900003A0A773A1521000089
    :100120003A11ED3A1C9700003A19653A240F000085
    :100130003A20DB3A2B8700003A46CB3A51757F7F55
    :100140003A1AA53A1FFB00003A1D3F3A22950000DB
    :100150003A1FDB3A252F00003A273B3A2C8F00004C
    :100160003A29D53A2F2900003A32833A37D700008E
    :100170003A38273A3D7D00003A1AA53A1FFB7F7FA7
    :10018000FFFF63511CCBD5448EBE473800B2B92B5C
    :1001900072A52B1FE4989D12568C0F06C87F81F91B
    :1001A0003A73F3ECAC6665E01E5AD7D3904D49C75D
    :1001B0000241BBBA74342DAEE6279FA1581B11959E
    :0201C000CA0E65
    ....

ed il contenuto del file dal quale voglio prelevare il blocco di dati e':
    :100100003A26733A311F000039FBA73A0653000024
    :100110003A031F3A0DC900003A0A973A1541000008
    :100120003A120D3A1CB700003A19853A242F000004
    :100130003A20FB3A2BA700003A46EB3A51957F7FD5
    :100140003A1AC53A201B00003A1D5F3A22B500005A
    :100150003A1FFB3A254F00003A275B3A2CAF0000CC
    :100160003A29F53A2F4900003A32A33A37F700000E
    :100170003A38473A3D9D00003A1AC53A201B7F7F26

Quello che dovrebbe fare lo script e' di sovrascrivere le righe del primo file con quelle del secondo file quando i primi 9 caratteri coincidono.
E' possibile?

Grazie
Zosty
zosty
Linux 1.0
Linux 1.0
 
Messaggi: 11
Iscritto il: gio nov 08, 2007 12:03
Slackware: 64 - current

Re: Modificare file hex

Messaggioda 414N » ven ago 03, 2012 8:54

Non è molto chiaro quello che chiedi, soprattutto perché usi terminologia tipica di un file di testo (righe, caratteri) quando i file sono binari.
Che cosa intendi per caratteri? Singoli byte? Coppie di byte?
Che cosa intendi per righe? Cosa devi effettuare di preciso? Una sovrascrittura totale del primo file col secondo o una sovrascrittura parziale (se il secondo file è più piccolo del primo)?
Avatar utente
414N
Iper Master
Iper Master
 
Messaggi: 2878
Iscritto il: mer feb 13, 2008 16:19
Località: Bulagna
Slackware: 14.0 (x64)
Kernel: 3.2.29
Desktop: LXDE

Re: Modificare file hex

Messaggioda fgcl2k » ven ago 03, 2012 8:56

414N ha scritto:Non è molto chiaro quello che chiedi, soprattutto perché usi terminologia tipica di un file di testo (righe, caratteri) quando i file sono binari.
Che cosa intendi per caratteri? Singoli byte? Coppie di byte?
Che cosa intendi per righe? Cosa devi effettuare di preciso? Una sovrascrittura totale del primo file col secondo o una sovrascrittura parziale (se il secondo file è più piccolo del primo)?

Stavo scrivendo una risposta "fotocopia" della tua ma mi hai battuto sul tempo :-)
Avatar utente
fgcl2k
Linux 2.0
Linux 2.0
 
Messaggi: 129
Iscritto il: gio ott 29, 2009 10:14
Nome Cognome: Federico
Slackware: 14.1 (64bit)
Kernel: 3.10.17
Desktop: KDE 4.12.5

Re: Modificare file hex

Messaggioda zosty » ven ago 03, 2012 14:16

Ok, cerco di spiegarmi meglio...spero di farcela! :)

I file sono file di testo ed ogni riga e' terminata dai caratteri 0x0d e 0x0a . Il secondo file e' piu' piccolo del primo.
Quello che vorrei fare e' sostituire le righe del primo file con quelle del secondo file se i primi 9 caratteri di ciascuna riga coincidono.
Per cui, considerando la prima riga del secondo file:

:100100003A26733A311F000039FBA73A0653000024

i primi 9 caratteri sono :10010000.

Ora, considerata questa stringa, la cerco all'inizio di ogni riga del primo file...se il risultato della ricerca e' positivo, voglio sostituire tutta la riga con la nuova riga.
Al termine di tutto, il file ottenuto dovrebbe essere:

...
:1000B000FA6A2D30E8300C0BF926BEEF04F0C6EFDB
:1000C00004F0CAEF04F0CEEF04F0FA6A3E440E0BDF
:1000D000F926000C030C050C0A0C1E0C3C0C780CC9
:0400E000F00C12000E
:0200E40000001A
:100100003A26733A311F000039FBA73A0653000024
:100110003A031F3A0DC900003A0A973A1541000008
:100120003A120D3A1CB700003A19853A242F000004
:100130003A20FB3A2BA700003A46EB3A51957F7FD5
:100140003A1AC53A201B00003A1D5F3A22B500005A
:100150003A1FFB3A254F00003A275B3A2CAF0000CC
:100160003A29F53A2F4900003A32A33A37F700000E
:100170003A38473A3D9D00003A1AC53A201B7F7F26
:10018000FFFF63511CCBD5448EBE473800B2B92B5C
:1001900072A52B1FE4989D12568C0F06C87F81F91B
:1001A0003A73F3ECAC6665E01E5AD7D3904D49C75D
:1001B0000241BBBA74342DAEE6279FA1581B11959E
:0201C000CA0E65
....

Spero di essermi spiegato...ma non ne sono molto sicuro! :doubt:
zosty
Linux 1.0
Linux 1.0
 
Messaggi: 11
Iscritto il: gio nov 08, 2007 12:03
Slackware: 64 - current

Re: Modificare file hex

Messaggioda 414N » ven ago 03, 2012 14:50

Se non ho capito male tu devi solo lavorare sull'output di testo prodotto da un qualche editor esadecimale per modificarne delle porzioni.
In tal caso, questo script che ho arrabbattato in quattro e quattr'otto dovrebbe fare al caso tuo:
Codice: Seleziona tutto
#!/bin/sh

if [ $# -ne 2 ]
then
   cat << EOF
Sostituisce le righe di file1 con quelle contenute in file2 che presentano
i medesimi 9 caratteri iniziali
Uso:
   $0 file1 file2
EOF
   exit 1
fi

FILE1="$1"
FILE2="$2"

# Ricavo il nome del file di output. Se FILE1 si chiama file1.txt, OUTFILE
# si chiamerà file1-PROC.txt.

OUTFILE="${FILE1%.*}-PROC.${FILE1##*.}"

# Copio FILE1 nell'output, in modo da modificare solo quello

cp "$FILE1" "$OUTFILE"

# Per ogni riga del secondo file...

while read F2LINE
do
   # ... ricavo i primi 9 caratteri della riga ...

   FIRST9=$(echo $F2LINE  |cut -c1-9)

   # ... e sostitituisco tutte le righe che iniziano con quei nove
   # caratteri con F2LINE in OUTFILE

   sed -i "s/^$FIRST9.*$/$F2LINE/g" "$OUTFILE"
done < "$FILE2"

# Se il file di output è stato modificato

if [ "$(diff "$FILE1" "$OUTFILE")" ]
then

   # lo comunico

   echo "Changes applied to $FILE1"
else

   # altrimenti, oltre a comunicarlo, rimuovo OUTFILE perchè tanto è
   # una copia di FILE1
   echo "Nothing changed in $FILE1"
   rm "$OUTFILE"
fi

L'ho testato sull'esempio che hai fornito e il risultato è proprio quello che hai riportato.
Avatar utente
414N
Iper Master
Iper Master
 
Messaggi: 2878
Iscritto il: mer feb 13, 2008 16:19
Località: Bulagna
Slackware: 14.0 (x64)
Kernel: 3.2.29
Desktop: LXDE

Re: Modificare file hex

Messaggioda zosty » lun ago 06, 2012 8:39

Esatto. Si tratta di modificare una parte di file ottenuto dopo aver compilato un progetto con dei dati di calibrazione specifici.

Ora provo lo script e ti faccio sapere! Anche io avevo pensato di ricorrere a sed...ma, ad essere onesto, non ne capisco molto! ;)

FUNZIONA PERFETTAMENTE!!! Ora me lo studio attentamente...

Grazie mille!!!!!!! =D>
zosty
Linux 1.0
Linux 1.0
 
Messaggi: 11
Iscritto il: gio nov 08, 2007 12:03
Slackware: 64 - current


Torna a Gnu/Linux in genere

Chi c’è in linea

Visitano il forum: fgcl2k e 2 ospiti