Dies gibt den Offset und die Bytes in Hex aus:
cmp -l file1.bin file2.bin | gawk '{printf "%08X %02X %02X\n", $1, strtonum(0$2), strtonum(0$3)}'
Oder machen Sie $1-1
um den ersten gedruckten Offset bei 0 beginnen zu lassen.
cmp -l file1.bin file2.bin | gawk '{printf "%08X %02X %02X\n", $1-1, strtonum(0$2), strtonum(0$3)}'
Leider strtonum()
ist spezifisch für GAWK, daher müssen Sie für andere Versionen von awk – z. B. mawk – eine Oktal-zu-Dezimal-Konvertierungsfunktion verwenden. Zum Beispiel
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)}'
Zur besseren Lesbarkeit aufgeschlüsselt:
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)
}'
Als ~Quack darauf hingewiesen:
% xxd b1 > b1.hex
% xxd b2 > b2.hex
Und dann
% diff b1.hex b2.hex
oder
% vimdiff b1.hex b2.hex
diff
+ xxd
Versuchen Sie diff
in der folgenden Kombination aus zsh/bash-Prozesssubstitution:
diff -y <(xxd foo1.bin) <(xxd foo2.bin)
Wo:
-y
zeigt Ihnen die Unterschiede nebeneinander (optional).xxd
ist ein CLI-Tool zum Erstellen einer Hexdump-Ausgabe der Binärdatei.- Fügen Sie
-W200
hinzu bisdiff
für eine breitere Ausgabe (von 200 Zeichen pro Zeile). - Verwenden Sie für Farben
colordiff
wie unten gezeigt.
colordiff
+ xxd
Wenn Sie colordiff
haben , es kann diff
einfärben Ausgabe, z. B.:
colordiff -y <(xxd foo1.bin) <(xxd foo2.bin)
Beispielausgabe:
vimdiff
+ xxd
Sie können auch vimdiff
verwenden , z. B.
vimdiff <(xxd foo1.bin) <(xxd foo2.bin)
Hinweise:
- wenn Dateien zu groß sind, Limit hinzufügen (z.B.
-l1000
) für jedenxxd