Contexto

Contexto

Contexto

Esta es una nueva publicación de mi pregunta de StackOverflow que se formuló incorrectamente, ya que no está relacionada con la programación.

Estoy jugando Bandit en OverTheWire ynivel trecerequiere descomprimir varios formatos de archivos comprimidos sin conocer la extensión del archivo. Para hacer esto, he estado comparando el volcado hexadecimal con firmas de archivos deSitio web de Gary Kessler.

Sin embargo, lo que he notado es que la firma hexadecimal aparece al revés. Por ejemplo, tome este gz, tgz gziparchivo de almacenamiento:

0000000 8b1f 0808 5006 5eb4 0302 6164 6174 2e32
0000010 6962 006e 3d01 c202 42fd 685a 3139 5941
0000020 5326 8e59 1c4f 00c8 1e00 ff7f f9fb da7f
...

Con la firma 8b1f 0808al revés, en comparación con lo que indica el sitio web de Gary Kessler:

1F 8B 08        .‹. GZ, TGZ         GZIP archive file
                        VLT         VLC Player Skin file

Pregunta

¿Por qué la firma está al revés? 1F 8B 08vs. 8b1f 0808​El primer archivo encontrado es un volcado hexadecimal de un archivo comprimido, data.txty tiene una firma adecuada de 1f8b 0808(encontrada usando head data.txt), que se alinea perfectamente con la firma. Sin embargo, cuando corro xxd -r data.txt | hexdumpuna vez más 8b1f 0808.

Los comentarios sobre mi pregunta de StackOverflow parecen indicar que está relacionado con la endianidad grande/pequeña, y me señalaron la -g1bandera de xxd, que significa agrupación.

Esto proporciona el resultado correcto, pero no entiendo qué es la agrupación ni cómo funciona.

Respuesta1

Agrupar se xxdrefiere al número de bytes que se tratan (y se muestran) como una unidad.

De forma predeterminada, xxdtrata su entrada como grupos de 2 bytes/16 bits (un número hexadecimal de cuatro dígitos) almacenados en orden big-endian.

Esto tendrá el efecto de que cada grupo de dos bytes de la entrada se mostrará en orden inverso (pero en realidad en el orden correcto para un sistema big-endian).

Es decir, los primeros dos bytes de la entrada 18 8Bse convertirán en un número de 16 bits 8B18, que es exactamente lo que ve.

Cuando cambia la xxdagrupación a "1" con la opción -g1, todos los bytes de la entrada se interpretarán como números de un solo byte (que obviamente no tienen "endianidad") y se mostrarán en el orden en que se leen. la entrada.

información relacionada