十六进制转储
此条目没有列出任何参考或来源。 (2017年7月29日) |
在电脑运算领域,十六进制转储(英文:Hex dump)是指从内存或其他存储设备中调取的数据的十六进制视图(该视图被打印在屏幕上或者纸上)。在调试软件及进行反向工程时,操作者经常需要查阅十六进制转储。
在十六进制转储中,每个字节被两位十六进制数字代表。十六进制转储在显示时通常被排列成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 -C
或 hd
):
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程序 od 和 hexdump 中,并非所有行都会被列出。包含与上一行相同的内容的行将被略去,取而代之的是一个星号。例如,一块全是零的信息打印如下:
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
参考资料
编辑外部链接
编辑- hexdump(页面存档备份,存于互联网档案馆) Linux in a Nutshell
- 使用 Hexdump 组件的指南Archive.is的存档,存档日期2013-01-16
- 反向 Hex Dump(页面存档备份,存于互联网档案馆) 使用 xxd 命令
- hdr(页面存档备份,存于互联网档案馆) 多功能的十六进制转储工具
- Data::HexDump::Range(页面存档备份,存于互联网档案馆) 被 hdr 使用的模块。
- hexd(页面存档备份,存于互联网档案馆) 另一种十六进制转储工具
- RFC 4194 "The S Hexdump Format"