十六进制转储

在电脑运算领域,十六进制转储(英文:Hex dump)是指从内存或其他存储设备中调取的数据的十六进制视图(该视图被打印在屏幕上或者纸上)。在调试软件及进行反向工程时,操作者经常需要查阅十六进制转储。

一个318字节的维基百科图标的十六进制转储


在十六进制转储中,每个字节被两位十六进制数字代表。十六进制转储在显示时通常被排列成8或16字节的列,有时用空格隔开。一些十六进制转储工具在行首提供十六进制的内存地址,有些则在行尾提供检验值。

虽然十六进制转储的名称中包含“十六进制”,但是一些十六进制转储软件也提供八进制或者十进制的输出选项。常用的十六进制转储工具包括 hexdump、od、xxd,有时这些软件也会被简单地命名为 dump 或者 D。

例子

一个程序十六进制转储的一部分(用 Unix 的 hexdump 工具生成):

 00105e0 e6b0 343b 9c74 0804 e7bc 0804 e7d5 0804
 00105f0 e7e4 0804 e6b0 0804 e7f0 0804 e7ff 0804
 0010600 e80b 0804 e81a 0804 e6b0 0804 e6b0 0804

上面的列子展示了十六进制转储的一种形式。但是十六进制转储不仅局限于如上形式,其字节序可以不同。以下的形式则仅在特定情形下使用:

 00105e0 e6 b008 04e79e08 04e7bc 08 04 e7 d50804

当必需明确字节的顺序时(如查阅进行机器语言程序或者 ROM时),则更倾向于逐字节地列出,每16字节一行,并可能用分隔符分成两个8字节的组:

 00105e0 e6 b0 08 04 e7 9e 08 04-e7 bc 08 04 e7 d5 08 04
 00105f0 e7 e4 08 04 e6 b0 08 04-e7 f0 08 04 e7 ff 08 04
 0010600 e8 0b 08 04 e8 1a 08 04-e6 b0 08 04 e6 b0 08 04

在一些情况下,也会用不在值之间留空白的形式表示:

 00105e0 e6b00804e79e0804e7bc0804e7d50804
 00105f0 e7e40804e6b00804e7f00804e7ff0804
 0010600 e80b0804e81a0804e6b00804e6b00804

Unix默认将两个字节并作一组显示。以下是在现代化的x86(小端序)计算机上通常的现实情况:

 00105e0 b0e6 0408 9ee7 0408 bce7 0408 d5e7 0408
 00105f0 e4e7 0408 b0e6 0408 f0e7 0408 ffe7 0408
 0010600 0be8 0408 1ae8 0408 b0e6 0408 b0e6 0408

通常,也会有额外的一列表显示出十六进制数字代表的ASCII码(例如 hexdump -Chd):

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

校验和

当十六进制转储需要手动输入时,便会在每一行的末尾提供一位或两位校验和,一般用256本行中所有数字之和,或者使用 CRC 值。这个校验和将用于确定用户的输入正确与否。

压缩的重复行

在Unix程序 odhexdump 中,并非所有行都会被列出。包含与上一行相同的内容的行将被略去,取而代之的是一个星号。例如,一块全是零的信息打印如下:

 0000000 0000 0000 0000 0000 0000 0000 0000 0000
 *
 0000030

这个特性可以使我们很方便地检测的大文件或存储设备的不规则情况。在现代 Linux 系统中,使用以下命令可以方便地扫描整个硬盘,以检查是否完全为空:

 # hexdump /dev/sda #(用需要扫描的设备的路径代替/dev/sda)

-v 选项使 hexdump 和 od 显示所有输入的数据:

 0000000 0000 0000 0000 0000 0000 0000 0000 0000
 0000010 0000 0000 0000 0000 0000 0000 0000 0000
 0000020 0000 0000 0000 0000 0000 0000 0000 0000

参考资料

外部链接