Etiquetado: diff

Comparando *binarios* con Bash

Actualización por Gunnar 11/Feb/’10 22:00. Script más breve aún y elegante. ¡Gracias Gunnar!

#!/bin/bash
# Elimina el uso de temporales, y usa descriptores de archivos.
[ $# -lt 2 ] && echo "Usage: $0 file_a fileb" && exit 0
if [ -f $1 -a -f $2 ]; then
diff <(hexdump $1) <(hexdump $2)
fi

En el artículo original, se describe este sencillo script para un proyecto de ingeniería reversa, intentando encontrar la estructura de archivo de datos. Mientras un simple diff hace bien el trabajo con archivos de texto, lo que vemos es un pequeño rodeo que hace el trabajo, y para nuestra suerte el tipo es todo un hacker, que se tomó algunos minutos para compartir la solución.

Aquí está el poema original (el de Gunnar es todo un haikú, y nos lo explica en sus comentarios):

#!/bin/bash
# script to compare two binary files
TMP=/tmp
[ $# -lt 2 ] && echo "Usage: $0 file_a fileb" && exit 0
R1=`mktemp -u -p /tmp XXXXXXXX`
R2=`mktemp -u -p /tmp XXXXXXXX`
if [ -f $1 -a -f $2 ]; then
hexdump $1 > $R1
hexdump $2 > $R2
diff $R1 $R2
rm $R1 $R2
fi

Como pueden ver, si se usan adecuadamente las capacidades de bash puede llevarnos a código más sencillo y más fácil de corregir y mantener.