Questo stamperà l'offset e i byte in esadecimale:
cmp -l file1.bin file2.bin | gawk '{printf "%08X %02X %02X\n", $1, strtonum(0$2), strtonum(0$3)}'
Oppure fai $1-1
per fare in modo che il primo offset stampato inizi da 0.
cmp -l file1.bin file2.bin | gawk '{printf "%08X %02X %02X\n", $1-1, strtonum(0$2), strtonum(0$3)}'
Sfortunatamente, strtonum()
è specifico di GAWK, quindi per altre versioni di awk, ad esempio mawk, dovrai usare una funzione di conversione da ottale a decimale. Ad esempio,
cmp -l file1.bin file2.bin | mawk 'function oct2dec(oct, dec) {for (i = 1; i <= length(oct); i++) {dec *= 8; dec += substr(oct, i, 1)}; return dec} {printf "%08X %02X %02X\n", $1, oct2dec($2), oct2dec($3)}'
Scomposto per leggibilità:
cmp -l file1.bin file2.bin |
mawk 'function oct2dec(oct, dec) {
for (i = 1; i <= length(oct); i++) {
dec *= 8;
dec += substr(oct, i, 1)
};
return dec
}
{
printf "%08X %02X %02X\n", $1, oct2dec($2), oct2dec($3)
}'
Come ~quack sottolineato:
% xxd b1 > b1.hex
% xxd b2 > b2.hex
E poi
% diff b1.hex b2.hex
o
% vimdiff b1.hex b2.hex
diff
+ xxd
Prova diff
nella seguente combinazione di sostituzione del processo zsh/bash:
diff -y <(xxd foo1.bin) <(xxd foo2.bin)
Dove:
-y
mostra le differenze fianco a fianco (facoltativo).xxd
è uno strumento CLI per creare un output hexdump del file binario.- Aggiungi
-W200
adiff
per un output più ampio (di 200 caratteri per riga). - Per i colori, usa
colordiff
come mostrato di seguito.
colordiff
+ xxd
Se hai colordiff
, può colorare diff
output, ad esempio:
colordiff -y <(xxd foo1.bin) <(xxd foo2.bin)
Esempio di output:
vimdiff
+ xxd
Puoi anche usare vimdiff
, ad esempio
vimdiff <(xxd foo1.bin) <(xxd foo2.bin)
Suggerimenti:
- se i file sono troppo grandi, aggiungi limite (ad es.
-l1000
) per ognixxd