hexdump: Como suprimir a coluna de deslocamento no modo hexadecimal

1

Eu queria obter 16 bytes de um arquivo binário, começando em 5º byte, sem separação de bytes ou palavras por espaços.

hexdump fará o que eu quero, apenas a coluna de deslocamento está atrapalhando a saída:

$ hexdump -s5 -n16 -xe '/1 "%01X"' binfile

od também faz a tarefa bem e pode até mesmo ser instruído para suprimir a coluna de deslocamento, embora eu precise usar sed para me livrar do espaçamento:

$ od -An -tx1 -j5 -N16 | sed 's/ //g' binfile

Tenho certeza de que funcionará sem sed , mas como tive muitos problemas com od no modo hexadecimal relacionado a endianness (bytes trocados), isso não é tão fácil quanto parece. Por exemplo, alterar -tx1 para algo maior irá trocar os bytes e atrapalhar o valor de 128 bits que eu quero. -tx1 é bom, mas ao contrário de hexdump eu não encontrei uma maneira de me livrar dos espaços enquanto mantendo a ordem de bytes como é ao mesmo tempo.

    
por syntaxerror 21.11.2015 / 00:48

1 resposta

4

A opção -x instrui o hexdump para exibir deslocamentos, e especificar um formato depois não o suprime. Livre-se da opção -x .

$ hexdump -s5 -n16 -e '/1 "%01X"' <<<@abcdefghijklmnopqrstuvwxyz; echo
65666768696A6B6C6D6E6F7071727374

Se você quiser ler valores de dois bytes no endianness da plataforma da maneira que o -x (que troca os dois bytes em plataformas little-endian como x86 e ARM¹), use %02X em vez de %01X .

¹ CPUs ARM suportam ambos endiannesses, mas quase todos os sistemas Unix os usam no modo little-endian.

    
por 21.11.2015 / 01:03

Tags