He escrito un breve script AWK que invierte hexdump -C
salida de nuevo a los datos originales. Usar así:
reverse-hexdump.sh hex.txt > data
Maneja marcadores de repetición '*' y genera datos originales incluso si son binarios.hexdump -C
y reverse-hexdump.sh
hacer un par de datos de ida y vuelta. Está disponible aquí:
- repositorio de volcado hexadecimal inverso de GitHub
- Directo a reverse-hexdump.sh
Restaurar file
, dada solo la salida de hexdump file
Si solo tiene la salida de hexdump file
y desea restaurar el archivo original, primero tenga en cuenta que la salida predeterminada de hexdump depende de la endianidad del sistema en el que ejecutó hexdump.
Si tiene acceso al sistema que creó el volcado, puede determinar su endianness usando el siguiente comando:
[[ "$(printf '\01\03' | hexdump)" == *0103* ]] && echo big || echo little
Revertir el volcado hexadecimal little-endian
Este es el caso más común. Todos los sistemas x86/x64 son little-endian. Si no conoce el endianness del sistema que ejecutó hexdump file
, prueba esto.
sed 's/ \(..\)\(..\)/ \2\1/g;$d' dump | xxd -r
El sed
parte convierte hexdump
formato de en xxd
formato de , al menos hasta ahora que xxd -r
funciona.
Revertir el volcado hexadecimal big-endian
sed '$d' dump | xxd -r
Errores conocidos (ver la sección de comentarios)
- Se agrega un byte nulo final si el archivo original tenía una longitud impar (por ejemplo, 1, 3, 5, 7, ..., byte de longitud).
- Las secciones repetidas del archivo original no se restauran correctamente si eran
hexdump
ed usando un*
.
Puede verificar su volcado para los casos problemáticos anteriores ejecutando el siguiente comando:
grep -qE '^\*|^[0-9a-f]*[13579bdf] *$' dump && echo bug || echo ok
Mejor alternativa para crear hexdumps en primer lugar
Además del no posix (y por lo tanto no tan portátil) xxd
hay od
(o ctal d ump) que debería estar disponible en todos los sistemas similares a Unix como se especifica en posix:
od -tx1 -An -v
Imprimirá un hex volcado adecimal, agrupando dígitos como bytes individuales (-tx1
), con n o A prefijos de direcciones (-An
, similar a xxd -p
) y sin abreviar las secciones repetidas como *
(-v
). Puede revertir dicho volcado usando xxd -r -p
.
Hay una herramienta similar llamada xxd
. Si ejecuta xxd
con solo un nombre de archivo, vuelca los datos en un formato de volcado hexadecimal bastante estándar:
# xxd bdata
0000000: 0001 0203 0405
......
Ahora, si canaliza la salida de nuevo a xxd
con el -r
y redirigir eso a un nuevo archivo, puede convertir el volcado hexadecimal a binario:
# xxd bdata | xxd -r >bdata2
# cmp bdata bdata2
# xxd bdata2
0000000: 0001 0203 0405