¿Cómo interpretar un volcado octal o hexadecimal de un archivo binario?

14

El archivo binario tiene cuerdas y algunos números, si lo hago od -c filenameo strings filename, puedo ver las cuerdas correctamente. Pero, ¿qué pasa con los números? Están en algún formato extraño.

El texto después de hacerlo od -c filenamees así:

0000000 036 \ 0 032 004 SD \ 0 \ 0 \ 0 \ 0 seq 1
0000020 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ t \ 0 ó 002 3 001
0000040 & \ 0 032 \ f O 2 006 \ 0 \ 0 \ 0 osfus 1
0000060 ó 002 3 001 ÿ \ r \ 0 \ 0 \ t \ 0 \ 0 @ 3 ×
0000100 233 º 004 \ 0 é 003 \ 0 \ 0 & \ 0 032 \ f O 2 7 \ 0
0000120 \ 0 \ 0 osfeu 1 ó 002 3 001 é 235
0000140 \ 0 \ 0 035 003 \ 0 @ 3 × 233 º 004 \ 0 Ñ \ a \ 0 \ 0
0000160 ä \ 0 032 \ f O r E \ 0 \ 0 \ 0 osfap 1

¿Cómo descifrar esto?

Incluso lo intenté hexdump -C filename

La salida es así:

00000000 1e 00 1a 04 53 44 00 00 00 00 73 65 71 31 20 20 | .... SD .... seq1 |
00000010 20 20 00 00 00 00 00 00 00 00 09 00 f3 02 33 01 | .......... ó.3. |
00000020 26 00 1a 0c 4f 32 06 00 00 00 6f 73 66 75 73 31 | & ... O2 .... osfus1 |
00000030 20 20 f3 02 33 01 ff 0d 00 00 09 00 00 40 33 d7 | ó.3.ÿ ...... @ 3 × |
00000040 9b ba 04 00 e9 03 00 00 26 00 1a 0c 4f 32 37 00 | .º..é ... & ... O27. |
00000050 00 00 6f 73 66 65 75 31 20 20 f3 02 33 01 e9 9d | ..osfeu1 ó.3.é. |
00000060 00 00 1d 03 00 40 33 d7 9b ba 04 00 d1 07 00 00 | ..... @ 3 × .º..Ñ ... |
00000070 e4 00 1a 0c 4f 72 45 00 00 00 6f 73 66 61 70 31 | ä ... OrE ... osfap1 |

Para aclarar, el archivo principal, que es un archivo normal, tenía un atributo que se mostraba, tiene un formato extraño, por lo que estamos viendo el archivo sin formato / binario.

Al hacer un volcado octal en el archivo normal, se resolvió el problema de visualización.

Con grep 'id=123' regular_file | head -1 | od -c, pude ver qué número había allí. Esperaba 1, nos mostró como 001.

Gilles 'SO- deja de ser malvado'
fuente
44
Para "interpretarlo", necesita saber en qué formato está almacenado.
Kevin
Me han dicho que los números están en formato binario, específicamente enteros binarios. ¿Eso ayuda a mi pregunta?
No, todo en una computadora es binario, necesita conocer el diseño del archivo: dónde está cada número, qué significa cada número. ¿De dónde sacaste este archivo?
Kevin
solo para aclarar, también tengo un archivo normal. [seq = 132253932] [Mayor = S] [Menor = D] [src = seq1] [Id = 0] [ref = 0] [Fecha = 20120307] Una de las etiquetas en el archivo normal tiene el valor en ascii, el el archivo normal generalmente se usa para leer los registros, pero para asegurarnos de que tenía el valor correcto, pero en un formato diferente, estamos viendo este archivo binario.
El lado derecho de un volcado hexadecimal "estándar" suele ser la representación ASCII de esos datos. Si ve este texto: not texten esa vista ASCII, no significa que sea ASCII para el programa que lee el archivo. p.ej. El número 7957706749327538292 cuando se codifica como un entero sin signo little-endian de 64 bits. Parece que este en la vista ASCII: not text.
Peter.O

Respuestas:

4

Hay muchas formas de almacenar números: ASCII (que puede tener variantes locales específicas, como usar ',' para separar la parte fraccional O como una agrupación de miles), entero binario (número variable de bits) / flotante / doble (todos que puede variar según la arquitectura endian y si el software que produce el archivo formaliza la representación), BCD (sin comprimir, empaquetado, punto fijo y otras variantes), decimal codificado bi-quinario ...

No hay un estándar.

symcbean
fuente
19

Una de las primeras cosas que tuve que memorizar para la informática fue Datos + Interpretación = Información útil . Un corolario de esto es que si te faltan datos o interpretación, no tienes nada. Los datos en sí no pueden decirle cómo interpretarlos. (puede tener metadatos que le indiquen esto, pero también necesita saber cómo interpretar los metadatos )

Dadas las circunstancias, sugiero probar esto:

file filename

Si surge algo como:

filename: data

y usted tiene absolutamente ninguna idea de lo que el formato es, qué programa es, qué es su uso, ni nada sobre el contenido de filename, a continuación, probablemente debería renunciar.

Salida de volcado octal

od(volcado octal) produce un volcado híbrido de texto y octal. Los no números son caracteres ya sea imprimibles, tales como o, s, f, caracteres, etc, o no imprimibles, tales como \0(ASCII 0, NUL), o \a(ASCII 7, BEL), o los números en la base 8, con el prefijo C estándar 0(por ejemplo 032= 26 en decimal). Su archivo se interpreta como una secuencia de bytes de 8 bits .

Salida de volcado hexadecimal

hexdumpproduce un volcado hexadecimal tradicional, con una columna que enumera bytes de 8 bits en hexadecimal, y la otra muestra qué caracteres ASCII corresponden a estos bytes, si corresponde (si el valor del byte es un carácter ASCII no imprimible o no es un carácter ASCII) , .se muestra en esa posición). Nuevamente, su archivo se interpreta como una secuencia de bytes de 8 bits .

Enteros

Si su archivo comprende 100% de enteros binarios (es decir, es una matriz unidimensional sin encabezado, uniforme, de algún tipo de representación de enteros), entonces debe responderse todas estas preguntas:

Probablemente hay más que estoy olvidando en este momento.

Y esto es solo para una matriz uniforme de enteros unidimensional, proveniente de una arquitectura de computadora moderna y común. Si sus datos tienen algún tipo de complejidad, las cosas se pondrán tan difíciles que rápidamente será más fácil ganar la lotería que simplemente adivinar el formato. Y tiene que adivinar (una suposición educada, pero una suposición), a menos que sepa el formato.

Alexios
fuente