十六进制转储
在计算中,十六进制转储是计算机数据的十六进制视图(在屏幕或纸上),来自RAM或来自文件或存储设备。 查看十六进制数据转储通常是作为调试或逆向工程的一部分完成的。在十六进制转储中,每个字节(8位)表示为两位十六进制数。 十六进制转储通常被组织成8或16字节的行,有时由空格分隔。 一些十六进制转储在开头具有十六进制存储器地址和/或在每一行的末尾具有校验和字节。虽然名称暗示使用base-16输出,但某些十六进制转储软件可能具有base-8(八进制)或base-10(十进制)输出的选项。 这个程序函数的一些常用名称是hexdump,od,xxd和简单转储甚至是D.
基本信息
- 中文名
十六进制转储
- 外文名
Hex dump
- 作用
一种存储形式
样例
程序的部分十六进制转储示例,由Unix程序hexdump生成:
但是,上面的示例表示十六进制转储的模糊形式,因为字节顺序可能不确定。 这样的十六进制转储仅在众所周知的字节顺序标准的上下文中有用,或者当有意地以完整形式给出值时(并且可能导致可变的字节数),例如:
当需要显式字节序列时(例如,对于机器代码程序或ROM内容的十六进制转储),逐字节表示是有利的,通常以16字节行组织,在8字节组之间具有可选的分频器:
很少使用精简形式,值之间没有空格:
在现代x86(小端)计算机上,Unix默认显示与两字节字相同的字节通常如下所示:
通常,附加列显示相应的ASCII文本转换(例如hexdump -C或hd):
校验
当十六进制转储打算手动输入计算机时,例如家用计算机时代的打印杂志文章的情况,每行末尾将添加校验和字节(或两个),通常计算为简单的256模数 行中所有值的总和或更复杂的CRC。 此校验和将用于确定用户是否正确输入行。
各种十六进制转储文件格式(包括S-record,Intel HEX和Tektronix扩展HEX)在每行末尾都有类似的校验和值。1872590
压缩重复的行
在Unix程序od和hexdump中,并未显示包含与前一行相同数据的所有显示输出行; 相反,显示只包含一个星号的行。 例如,一个全零的块打印为:
此压缩功能为检查大型文件或完整设备的不规则性提供了有用的工具。 在现代Linux系统中,扫描整个硬盘以检查它是否全部为空是很方便的:
-v选项让hexdump和od显式显示所有输入数据:
od和hexdump
在Unix/POSIX/GNU系统上:“实用程序od和hexdump从文件或流输出八进制,十六进制或其他编码的字节。根据您的系统类型,这两个实用程序中的任何一个或两个都可用 - BSD系统弃用 对于hexdump,GNU系统反过来。但是,两个实用程序具有完全相同的目的,只是略有不同的开关。
DUMP和DDT和DEBUG
在早期个人计算机上使用的CP/M 8位操作系统中,标准DUMP程序将列出每行16字节的文件,行的开头是十六进制偏移量,最后是每个字节的ASCII等效值。超出标准可打印ASCII字符范围(20到7E)的字节将显示为可视对齐的单个周期。在标准CP/M调试器DDT中调用D命令时,使用相同的格式显示内存。后来的格式化身(例如在DOS调试器DEBUG中)将第8个字节和第9个字节之间的空格更改为破折号而不改变整体宽度。
此表示法已保留在直接或间接源自CP/M的操作系统中,包括DR-DOS,MS-DOS,OS/2和MS-Windows。在Linux系统上,命令hexcat也会生成这种经典输出格式。设计这种格式的主要原因是它适合标准80字符宽屏幕或打印机上的最大数据量,同时仍然非常容易阅读和浏览。