Estaba buscando cómo hacer un hexdump inverso y encontré xxd mencionado. 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 la salida hexdump se convierte425a
en la salida xxd) - Hay algunos caracteres adicionales después de cada línea.
Solo tengo la versión hexdumped de ciertos archivos en un servidor. ¿Cómo puedo recuperar correctamente los datos binarios usando xxd?
linux
conversion
hexdump
xxd
tanon
fuente
fuente
hexdump
permite elegir la endianness utilizada en su salida, lo que podría simplificar esto. (¿Por qué ahora? Tu pregunta fue útil para algo no relacionado.)Respuestas:
No conozco ningún comando que haga la conversión, pero se puede dividir fácilmente en unos pocos pasos:
hexdump
salida usandosed
xxd
5a42
convierte425a
) usandodd
Aquí está el comando completo:
fuente
Esta respuesta es una publicación cruzada de https://stackoverflow.com/a/52834021/6770384
Puedes hacer la conversión en un solo
sed
comando. Es suficiente agregar:
después de la dirección y cambiar la endianness (cambiarab12
a12ab
).Errores conocidos (ver sección de comentarios)
hexdump
con a*
.fuente
hexdump
puede ocultar partes repetidas usando a*
. Este comando tampoco puede restaurar estas partes correctamente. Ejemplo:yes | head -n100 | hexdump | sed -E 's/ /: /;s/ (..)(..)/ \2\1/g' | xxd -r
imprime solo 8 eny
lugar de 100. Arreglar estas cosas requeriría más que esta línea. Tal vez agregue otro script en el futuro.*
, no lo sabia!