Despejo hexadecimal - Hex dump

Na computação , um dump hexadecimal é uma visão hexadecimal (na tela ou no papel) dos dados do computador, da memória ou de um arquivo de computador ou dispositivo de armazenamento . Examinar um dump hexadecimal de dados geralmente é feito no contexto de depuração ou engenharia reversa .

Em um dump hexadecimal, cada byte (8 bits ) é representado como um número hexadecimal de dois dígitos . Os dumps hexadecimais são comumente organizados em linhas de 8 ou 16 bytes, às vezes separados por espaços em branco. Alguns dumps hexadecimais têm o endereço de memória hexadecimal no início.

Alguns nomes comuns para esta função programa são hexdump, hd, od, xxde simplesmente dumpou mesmo D.

Amostras

Um exemplo de arquivo de texto:

0123456789ABCDEF
/* ********************************************** */
	Table with TABs (09)
	1       2       3
	3.14	6.28	9.42

conforme exibido pelo Unix hexdump :

0000000 30 31 32 33 34 35 36 37 38 39 41 42 43 44 45 46
0000010 0a 2f 2a 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a
0000020 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a
*
0000040 2a 2a 20 2a 2f 0a 09 54 61 62 6c 65 20 77 69 74
0000050 68 20 54 41 42 73 20 28 30 39 29 0a 09 31 09 09
0000060 32 09 09 33 0a 09 33 2e 31 34 09 36 2e 32 38 09
0000070 39 2e 34 32 0a                                 
0000075

A coluna mais à esquerda é o deslocamento hexadecimal (ou endereço) para os valores das colunas seguintes. Cada linha exibe 16 bytes, com exceção da linha que contém um único *. O * é usado para indicar que várias ocorrências da mesma exibição foram omitidas. A última linha exibe o número de bytes retirados da entrada.

Uma coluna adicional mostra a tradução de caracteres ASCII correspondente com hexdump -Cou hd:

00000000  30 31 32 33 34 35 36 37  38 39 41 42 43 44 45 46  |0123456789ABCDEF|
00000010  0a 2f 2a 20 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a  |./* ************|
00000020  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a  |****************|
*
00000040  2a 2a 20 2a 2f 0a 09 54  61 62 6c 65 20 77 69 74  |** */..Table wit|
00000050  68 20 54 41 42 73 20 28  30 39 29 0a 09 31 09 09  |h TABs (09)..1..|
00000060  32 09 09 33 0a 09 33 2e  31 34 09 36 2e 32 38 09  |2..3..3.14.6.28.|
00000070  39 2e 34 32 0a                                    |9.42.|
00000075

Isso é útil ao tentar localizar caracteres TAB em um arquivo que deve usar vários espaços.


A -vopção faz com que o hexdump exiba todos os dados detalhadamente:

00000000  30 31 32 33 34 35 36 37  38 39 41 42 43 44 45 46  |0123456789ABCDEF|
00000010  0a 2f 2a 20 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a  |./* ************|
00000020  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a  |****************|
00000030  2a 2a 2a 2a 2a 2a 2a 2a  2a 2a 2a 2a 2a 2a 2a 2a  |****************|
00000040  2a 2a 20 2a 2f 0a 09 54  61 62 6c 65 20 77 69 74  |** */..Table wit|
00000050  68 20 54 41 42 73 20 28  30 39 29 0a 09 31 09 09  |h TABs (09)..1..|
00000060  32 09 09 33 0a 09 33 2e  31 34 09 36 2e 32 38 09  |2..3..3.14.6.28.|
00000070  39 2e 34 32 0a                                    |9.42.|
00000075

od

O comando POSIX [1] pode ser usado para exibir um dump hexadecimal com a opção -tx.

# od -tx1 tableOfTabs.txt
0000000    30  31  32  33  34  35  36  37  38  39  41  42  43  44  45  46
0000020    0a  2f  2a  20  2a  2a  2a  2a  2a  2a  2a  2a  2a  2a  2a  2a
0000040    2a  2a  2a  2a  2a  2a  2a  2a  2a  2a  2a  2a  2a  2a  2a  2a
*
0000100    2a  2a  20  2a  2f  0a  09  54  61  62  6c  65  20  77  69  74
0000120    68  20  54  41  42  73  20  28  30  39  29  0a  09  31  09  09
0000140    32  09  09  33  0a  09  33  2e  31  34  09  36  2e  32  38  09
0000160    39  2e  34  32  0a                                            
0000165

Avaliações de personagens podem ser adicionadas com a opção -c:

0000000    0   1   2   3   4   5   6   7   8   9   A   B   C   D   E   F
           30  31  32  33  34  35  36  37  38  39  41  42  43  44  45  46
0000020   \n   /   *       *   *   *   *   *   *   *   *   *   *   *   *
           0a  2f  2a  20  2a  2a  2a  2a  2a  2a  2a  2a  2a  2a  2a  2a
0000040    *   *   *   *   *   *   *   *   *   *   *   *   *   *   *   *
           2a  2a  2a  2a  2a  2a  2a  2a  2a  2a  2a  2a  2a  2a  2a  2a
*
0000100    *   *       *   /  \n  \t   T   a   b   l   e       w   i   t
           2a  2a  20  2a  2f  0a  09  54  61  62  6c  65  20  77  69  74
0000120    h       T   A   B   s       (   0   9   )  \n  \t   1  \t  \t
           68  20  54  41  42  73  20  28  30  39  29  0a  09  31  09  09
0000140    2  \t  \t   3  \n  \t   3   .   1   4  \t   6   .   2   8  \t
           32  09  09  33  0a  09  33  2e  31  34  09  36  2e  32  38  09
0000160    9   .   4   2  \n                                            
           39  2e  34  32  0a                                            
0000165

Nesta saída, os caracteres TAB são exibidos como \ t e os caracteres NEWLINE como \ n.

DUMP, DDT e DEBUG

No sistema operacional CP / M de 8 bits usado nos primeiros computadores pessoais, o programa DUMP padrão listaria um arquivo de 16 bytes por linha com o deslocamento hexadecimal no início da linha e o equivalente ASCII de cada byte no final. Bytes fora do intervalo padrão de caracteres ASCII imprimíveis (20 a 7E) seriam exibidos como um único período para alinhamento visual. Este mesmo formato foi usado para exibir a memória ao invocar o comando D no depurador CP / M padrão DDT . Versões posteriores do formato (por exemplo, no depurador DOS DEBUG ) alteraram o espaço entre o 8º e o 9º byte para um travessão, sem alterar a largura geral.

Esta notação foi mantida em sistemas operacionais que foram direta ou indiretamente derivados de CP / M, incluindo DR-DOS , MS-DOS , OS / 2 e MS-Windows . Em sistemas Linux, o comando hexcat também produz esse formato de saída clássico. A principal razão para o design desse formato é que ele se ajusta ao máximo de dados em uma tela ou impressora padrão de 80 caracteres, ao mesmo tempo em que é muito fácil de ler e folhear visualmente.

1234:0000: 57 69 6B 69 70 65 64 69 61 2C 20 74 68 65 20 66  Wikipedia, the f
1234:0010: 72 65 65 20 65 6E 63 79 63 6C 6F 70 65 64 69 61  ree encyclopedia
1234:0020: 20 74 68 61 74 20 61 6E 79 6F 6E 65 20 63 61 6E   that anyone can
1234:0030: 20 65 64 69 74 00 00 00 00 00 00 00 00 00 00 00   edit...........

Aqui, a coluna mais à esquerda representa o endereço no qual os bytes representados pelas colunas seguintes estão localizados. CP / M e vários sistemas DOS rodaram em modo real nas CPUs x86 , onde os endereços são compostos de duas partes (base e offset).

Nos exemplos acima, os 00s finais são bytes inexistentes além do final do arquivo. Algumas ferramentas de despejo exibem outros caracteres para que fique claro que eles estão além do final do arquivo, normalmente usando espaços ou asteriscos, por exemplo:

1234:0000: 57 69 6B 69 70 65 64 69 61 2C 20 74 68 65 20 66  Wikipedia, the f
1234:0010: 72 65 65 20 65 6E 63 79 63 6C 6F 70 65 64 69 61  ree encyclopedia
1234:0020: 20 74 68 61 74 20 61 6E 79 6F 6E 65 20 63 61 6E   that anyone can
1234:0030: 20 65 64 69 74                                    edit

ou

1234:0000: 57 69 6B 69 70 65 64 69 61 2C 20 74 68 65 20 66  Wikipedia, the f
1234:0010: 72 65 65 20 65 6E 63 79 63 6C 6F 70 65 64 69 61  ree encyclopedia
1234:0020: 20 74 68 61 74 20 61 6E 79 6F 6E 65 20 63 61 6E   that anyone can
1234:0030: 20 65 64 69 74 ** ** ** ** ** ** ** ** ** ** **   edit

Veja também

Referências

links externos

  • Como usar o utilitário Hexdump Unix Exemplos abrangentes.
  • hdr Hexdump com faixas coloridas para facilitar a visualização. Opções para pular dados, exibindo campos de bits, definição de intervalo complexo, ... siga o link para 'hdr_examples.pod'.
  • Cheatsheet hexadecimal para procurar nibbles de byte e bits de nibble.