
Estaba buscando cómo hacer un volcado hexadecimal inverso y encontré que se menciona xxd. Sin embargo, no parece funcionar simplemente con:
xxd -r hexdumpfile > binaryfile
Luego comparé la diferencia entre las salidas de xxd infile
y hexdump infile
y encontré tres diferencias:
- La salida xxd tiene dos puntos después de la dirección.
- La salida xxd tiene las posiciones en los datos invertidas (por ejemplo,
5a42
en hexdump la salida se convierte425a
en salida xxd) - Hay algunos caracteres extra después de cada línea.
Solo tengo la versión volcada en hexadecimal de ciertos archivos en un servidor. ¿Cómo puedo recuperar correctamente los datos binarios usando xxd?
Respuesta1
No conozco ningún comando que realice la conversión, pero se puede dividir fácilmente en unos pocos pasos:
- Quitar direcciones de
hexdump
la salida usandosed
- Convertir a binario usando
xxd
- Conversión endian (por ejemplo,
5a42
se convierte en425a
) usandodd
Aquí está el comando completo:
sed 's/^[0-9]*//' hexdump | xxd -r -p | dd conv=swab of=binaryfile
Respuesta2
Esta respuesta es una publicación cruzada dehttps://stackoverflow.com/a/52834021/6770384
Puedes hacer la conversión con un solo sed
comando. Es suficiente agregar :
después de la dirección y cambiar el endianidad (cambiando ab12
a 12ab
).
sed -E 's/ /: /;s/ (..)(..)/ \2\1/g;$d' dump | xxd -r
Errores conocidos(ver sección de comentarios)
- Se agrega un byte nulo al 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 se editaron
hexdump
utilizando un archivo*
.
Respuesta3
Intenta agregar -p
.
xxd -r -p hexdumpfile > binaryfile
Respuesta4
Simplemente puedes usar las siguientes cosas.
Obtener volcado hexadecimal en el formato requerido
volcado hexadecimal -Cv <archivo_binario.bin> > archivo_binario.txt
-C imprimirá datos byte a byte
-v no usará * para contenido repetido
Ahora necesita eliminar los primeros y últimos caracteres de binario_file.txt para cada línea. Puedes usar el comando sed aquí.
Ahora usa el comando xxd
xxd -r -p archivo_binario.txt > recuperar_archivo_binario.bin
Puede comprobar md5sum de ambos archivos. debe coincidir
md5sum archivo_binario.bin
md5sum recuperar_archivo_binario.bin