Esto imprimirá el desplazamiento y los bytes en hexadecimal:
cmp -l file1.bin file2.bin | gawk '{printf "%08X %02X %02X\n", $1, strtonum(0$2), strtonum(0$3)}'
O haz $1-1
para que el primer desplazamiento impreso comience en 0.
cmp -l file1.bin file2.bin | gawk '{printf "%08X %02X %02X\n", $1-1, strtonum(0$2), strtonum(0$3)}'
Desafortunadamente, strtonum()
es específico de GAWK, por lo que para otras versiones de awk, por ejemplo, mawk, deberá usar una función de conversión de octal a decimal. Por ejemplo,
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)}'
Desglosado para facilitar la lectura:
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)
}'
Como ~curandero señaló:
% xxd b1 > b1.hex
% xxd b2 > b2.hex
Y entonces
% diff b1.hex b2.hex
o
% vimdiff b1.hex b2.hex
diff
+ xxd
Prueba diff
en la siguiente combinación de sustitución de proceso zsh/bash:
diff -y <(xxd foo1.bin) <(xxd foo2.bin)
donde:
-y
muestra las diferencias una al lado de la otra (opcional).xxd
es una herramienta CLI para crear una salida de volcado hexadecimal del archivo binario.- Agregar
-W200
adiff
para una salida más amplia (de 200 caracteres por línea). - Para colores, use
colordiff
como se muestra a continuación.
colordiff
+ xxd
Si tienes colordiff
, puede colorear diff
salida, por ejemplo:
colordiff -y <(xxd foo1.bin) <(xxd foo2.bin)
Salida de muestra:
vimdiff
+ xxd
También puedes usar vimdiff
, por ejemplo
vimdiff <(xxd foo1.bin) <(xxd foo2.bin)
Sugerencias:
- si los archivos son demasiado grandes, agregue un límite (por ejemplo,
-l1000
) para cadaxxd