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 gzip
archivo 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 0808
al 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 08
vs. 8b1f 0808
El primer archivo encontrado es un volcado hexadecimal de un archivo comprimido, data.txt
y 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 | hexdump
una 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 -g1
bandera 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 xxd
refiere al número de bytes que se tratan (y se muestran) como una unidad.
De forma predeterminada, xxd
trata 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 8B
se convertirán en un número de 16 bits 8B18
, que es exactamente lo que ve.
Cuando cambia la xxd
agrupació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.