Cela imprimera le décalage et les octets en hexadécimal :
cmp -l file1.bin file2.bin | gawk '{printf "%08X %02X %02X\n", $1, strtonum(0$2), strtonum(0$3)}'
Ou faites $1-1
pour que le premier décalage imprimé commence à 0.
cmp -l file1.bin file2.bin | gawk '{printf "%08X %02X %02X\n", $1-1, strtonum(0$2), strtonum(0$3)}'
Malheureusement, strtonum()
est spécifique à GAWK, donc pour les autres versions de awk, par exemple, mawk, vous devrez utiliser une fonction de conversion octal-décimal. Par exemple,
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)}'
Décomposé pour plus de lisibilité :
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)
}'
Comme ~charlatan souligné :
% xxd b1 > b1.hex
% xxd b2 > b2.hex
Et puis
% diff b1.hex b2.hex
ou
% vimdiff b1.hex b2.hex
diff
+ xxd
Essayez diff
dans la combinaison suivante de substitution de processus zsh/bash :
diff -y <(xxd foo1.bin) <(xxd foo2.bin)
Où :
-y
affiche les différences côte à côte (facultatif).xxd
est un outil CLI pour créer une sortie hexdump du fichier binaire.- Ajouter
-W200
àdiff
pour une sortie plus large (de 200 caractères par ligne). - Pour les couleurs, utilisez
colordiff
comme indiqué ci-dessous.
colordiff
+ xxd
Si vous avez colordiff
, il peut coloriser diff
sortie, par exemple :
colordiff -y <(xxd foo1.bin) <(xxd foo2.bin)
Exemple de sortie :
vimdiff
+ xxd
Vous pouvez également utiliser vimdiff
, par exemple
vimdiff <(xxd foo1.bin) <(xxd foo2.bin)
Conseils :
- si les fichiers sont trop volumineux, ajoutez une limite (par exemple,
-l1000
) pour chaquexxd