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.
Rispondi
zosty
Linux 0.x
Linux 0.x
Messaggi: 11
Iscritto il: gio 8 nov 2007, 12:03
Slackware: 64 - current

Modificare file hex

Messaggio da zosty »

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

Avatar utente
414N
Iper Master
Iper Master
Messaggi: 2922
Iscritto il: mer 13 feb 2008, 16:19
Slackware: 15.0
Kernel: 5.15.19
Desktop: KDE5
Località: Bulagna
Contatta:

Re: Modificare file hex

Messaggio da 414N »

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
fgcl2k
Linux 1.x
Linux 1.x
Messaggi: 137
Iscritto il: gio 29 ott 2009, 10:14
Nome Cognome: Federico
Slackware: 14.1 (64bit)
Kernel: 3.10.17
Desktop: KDE 4.13.3

Re: Modificare file hex

Messaggio da fgcl2k »

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 :-)

zosty
Linux 0.x
Linux 0.x
Messaggi: 11
Iscritto il: gio 8 nov 2007, 12:03
Slackware: 64 - current

Re: Modificare file hex

Messaggio da zosty »

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:

Avatar utente
414N
Iper Master
Iper Master
Messaggi: 2922
Iscritto il: mer 13 feb 2008, 16:19
Slackware: 15.0
Kernel: 5.15.19
Desktop: KDE5
Località: Bulagna
Contatta:

Re: Modificare file hex

Messaggio da 414N »

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.

zosty
Linux 0.x
Linux 0.x
Messaggi: 11
Iscritto il: gio 8 nov 2007, 12:03
Slackware: 64 - current

Re: Modificare file hex

Messaggio da zosty »

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>

Rispondi