多进制数据查看工具-hexdump


hexdump 是一个十六进制数据查看工具,可生成 CP/M-like 格式的数据,可处理 EBCDIC,支持国际化,提供很多格式化的函数。
Dump binary files in a CP/M-like hex format. Yes, it's yet another textual hex dumper for people who think od -x output is ugly. This one produces a nice CP/M-like format by default and can do EBCDIC. It's internationalized, too. Has many optional formatting functions.
hexdump 以 ASCII、十进制、十六进制或八进制显示文件内容。xxd也是类似的多进制数据查看工具。
格式
hexdump [options] FILE [...]
hexdump [-bcCdovx] [-e fmt] [-f fmt_file] [-n length] [-s skip] [file ...]
选项说明
-b 单字节八进制显示。每个字节显示为8进制。一行共16个字节,一行开始以十六进制显示偏移值。
-c 单字节字符显示。每个字节显示为ASCII字符。
-C 规范化“十六进制+ASCII”显示。每个字节显示为16进制和相应的ASCII字符。
-d 两字节十进制显示。
-e <format_string> 以指定的格式字符串展示数据。
-f <format_file> 指定包含一个或多个换行分隔格式字符串的文件。内容使用 # 号开头表示注释。
-n <length> 只解释输入的指定<length>长度个字节。
-o 两字节八进制显示。
-s <offset> 跳过开头指定长度个字节。从偏移量开始输出。
-v 显示时不压缩相似的行。该选项使 hextump 显示所有输入数据。没有该选项的话,任何数量的输出行组如果与前一组相同,将被替换为由一个星号构成的行。
-x 两字节十六进制显示。
格式(-e参数)
格式字符串由单引号包含,格式字符串形如:'a/b "format1" "format2"'。每个格式字符串由三部分组成,每个由空格分割,如a/b表示,b表示对每b个输入字节应用format1格式,a表示对每个a输入字节应用format2,一般a>b,且b只能为1,2,4,另外a可以省略,若省略则a=1。format1和format2中可以使用类似printf的格式字符串。
%02d:两位十进制
%03x:三位十六进制
%02o:两位八进制
%c:单个字符等
%_ad:标记下一个输出字节的序号,用十进制表示
%_ax:标记下一个输出字节的序号,用十六进制表示
%_ao:标记下一个输出字节的序号,用八进制表示
%_p:对不能以常规字符显示的用.代替
同一行显示多个格式字符串,可以跟多个-e选项。
格式字符串
格式字符串可以包含任意数量的格式单元,由空格分隔。格式单元最多包含三项:迭代计数、字节计数和格式。
迭代计数是可选的正整数,缺省为1,表示每种格式应用的次数。
字节计数是可选的正整数,表示每次按照指定格式迭代要解释的字节数。
如果指定了迭代计数和/或字节计数,则必须使用单斜杠放在迭代计数之后和/或字节计数之前消除歧义。斜杠前后的任何空格都将被忽略。
格式是必需的,必须用双引号括起来。它被解释为 fprintf 样式的格式字符串(参见 fprintf(3)),但以下情况除外:
星号(*)不能用作字段宽度或精度。
每个 s 转换字符都需要字节计数或字段精度(不同于 fprintf(3) 默认值,如果精度未指定,则打印整个字符串)。
不支持转换字符 h、l、n、p 和 q。
支持 C 标准中描述的单字符转义序列。
字符 转义
NULL \0
<alert character> \a
<backspace> \b
<form-feed> \f
<newline> \n
<carriage return> \r
<tab> \t
<vertical tab> \v
转换字符串
hexdump 还支持以下额外的转换字符串用于格式字符串中。
_a[dox] 标记下一个输出字节的偏移量,在输入文件中累积。d、o、x 分别以十进制、八进制和十六进制显示。
_A[dox] 与 _a 转换字符串相同,只是在处理所有输入数据后只执行一次。
_c 在默认字符集中输出字符。非打印字符以三个字符、零填充八进制显示,但可通过标准转义符号(见上文)表示的字符除外。
_p 默认字符集中输出字符。非打印字符显示为单个点号 “.”。
_u 输出美国 ASCII 字符,控制字符使用以下小写名称显示除外。大于 0xff 的字符显示为十六进制字符串。
控制字符如下:
示例
使用vim在文件t2.txt中输入如下内容:
FreeOA.Net
不指定选项缺省以十六进制显示指定文件的内容。
$ hexdump t2.txt
0000000 7246 6565 414f 4e2e 7465 000a
000000b
其中第一列为偏移量。
单字节字符展示。
0000000 F r e e O A . N e t \n
000000b
输出十六进制和对应字符。
00000000 46 72 65 65 4f 41 2e 4e 65 74 0a |FreeOA.Net.|
0000000b
从指定偏移量开始输出。比如偏移3个字节,跳过'Fre'。
hexdump -s3 -C t2.txt
00000003 65 4f 41 2e 4e 65 74 0a |eOA.Net.|
格式化输出并标记每个字节的偏移量。
hexdump -e'/1 "%_ad %02X\n"' t2.txt
0 46
1 72
2 65
*
4 4F
5 41
6 2E
7 4E
8 65
9 74
10 0A
hexdump与od
在Linux中,两命令都用于以十六进制和其他格式显示文件的内容,都提供了对文件进行二进制查看和分析的功能。以下是其简要说明:
od命令:
“od”(octal dump)命令以不同的格式显示文件的内容,默认以八进制格式显示。它可以显示文件的十六进制值、八进制值、ASCII字符或其他格式的数据。
常用选项包括:
“-t”:指定要显示的数据格式,如"-t x"表示十六进制格式,"-t d"表示十进制格式。
“-A”:指定要显示的字符集,如"-A n"表示使用无符号字符(不显示不可打印字符)。
“-c”:以ASCII字符形式显示文件内容。
示例:
显示文件的十六进制格式:od -t x1 file.txt
显示文件的ASCII字符格式:od -c file.txt
hexdump命令:
"hexdump"命令以十六进制和ASCII字符形式显示文件的内容。它以列格式显示文件的十六进制值,并在相邻的列中显示相应的ASCII字符。
常用选项包括:
“-C”:以列格式显示十六进制和ASCII字符。
“-n”:指定要显示的字节数。
“-s”:指定要从文件中开始显示的偏移量。
示例:见上文。
这些命令可以帮助以不同的格式查看文件的内容,特别适用于对二进制文件、内存映像或其他非文本文件进行分析和调试。在功能和用法上有一些区别,尽管它们都用于以十六进制和其他格式显示文件的内容。以下是它们之间的主要区别:
输出格式:"od"命令默认以八进制格式显示文件内容,但可以通过选项来选择其他格式,如十六进制或十进制。它可以显示文件的十六进制值、八进制值、ASCII字符或其他格式的数据。而"hexdump"命令以十六进制和ASCII字符形式显示文件内容,并以列格式呈现,将相邻的十六进制值和ASCII字符显示在一起。
默认显示:"od"命令默认情况下显示文件的所有字节,包括不可打印字符。它显示文件的每个字节的八进制值,并且可以通过选项来选择不同的显示格式。而"hexdump"命令默认只显示可打印字符的十六进制值和ASCII字符,不显示不可打印字符。
可读性:"hexdump"命令以列格式显示文件内容,将十六进制值和ASCII字符一一对应显示,更易于人类阅读和分析。它提供了一种更直观的方式来查看文件的内容。相比之下,"od"命令以行格式显示文件内容,可能不太直观,需要更多的解析和解读。
选项和功能:"od"命令提供了更多的选项来自定义输出格式和显示内容,例如选择不同的数据格式、指定字符集和显示地址等。它还可以处理更广泛的数据类型,并具有更多的功能,如显示文件的文件偏移量和文件指针位置。而"hexdump"命令提供了一些简单的选项,如指定显示格式、显示字节数等,但功能相对较简单。
最新版本:1.8
使用C99 bools,通过了cppcheck审计,并添加一个回归分析测试。
项目主页:http://www.catb.org/~esr/hexdump/
Dump binary files in a CP/M-like hex format. Yes, it's yet another textual hex dumper for people who think od -x output is ugly. This one produces a nice CP/M-like format by default and can do EBCDIC. It's internationalized, too. Has many optional formatting functions.
hexdump 以 ASCII、十进制、十六进制或八进制显示文件内容。xxd也是类似的多进制数据查看工具。
格式
hexdump [options] FILE [...]
hexdump [-bcCdovx] [-e fmt] [-f fmt_file] [-n length] [-s skip] [file ...]
选项说明
-b 单字节八进制显示。每个字节显示为8进制。一行共16个字节,一行开始以十六进制显示偏移值。
-c 单字节字符显示。每个字节显示为ASCII字符。
-C 规范化“十六进制+ASCII”显示。每个字节显示为16进制和相应的ASCII字符。
-d 两字节十进制显示。
-e <format_string> 以指定的格式字符串展示数据。
-f <format_file> 指定包含一个或多个换行分隔格式字符串的文件。内容使用 # 号开头表示注释。
-n <length> 只解释输入的指定<length>长度个字节。
-o 两字节八进制显示。
-s <offset> 跳过开头指定长度个字节。从偏移量开始输出。
-v 显示时不压缩相似的行。该选项使 hextump 显示所有输入数据。没有该选项的话,任何数量的输出行组如果与前一组相同,将被替换为由一个星号构成的行。
-x 两字节十六进制显示。
格式(-e参数)
格式字符串由单引号包含,格式字符串形如:'a/b "format1" "format2"'。每个格式字符串由三部分组成,每个由空格分割,如a/b表示,b表示对每b个输入字节应用format1格式,a表示对每个a输入字节应用format2,一般a>b,且b只能为1,2,4,另外a可以省略,若省略则a=1。format1和format2中可以使用类似printf的格式字符串。
%02d:两位十进制
%03x:三位十六进制
%02o:两位八进制
%c:单个字符等
%_ad:标记下一个输出字节的序号,用十进制表示
%_ax:标记下一个输出字节的序号,用十六进制表示
%_ao:标记下一个输出字节的序号,用八进制表示
%_p:对不能以常规字符显示的用.代替
同一行显示多个格式字符串,可以跟多个-e选项。
格式字符串
格式字符串可以包含任意数量的格式单元,由空格分隔。格式单元最多包含三项:迭代计数、字节计数和格式。
迭代计数是可选的正整数,缺省为1,表示每种格式应用的次数。
字节计数是可选的正整数,表示每次按照指定格式迭代要解释的字节数。
如果指定了迭代计数和/或字节计数,则必须使用单斜杠放在迭代计数之后和/或字节计数之前消除歧义。斜杠前后的任何空格都将被忽略。
格式是必需的,必须用双引号括起来。它被解释为 fprintf 样式的格式字符串(参见 fprintf(3)),但以下情况除外:
星号(*)不能用作字段宽度或精度。
每个 s 转换字符都需要字节计数或字段精度(不同于 fprintf(3) 默认值,如果精度未指定,则打印整个字符串)。
不支持转换字符 h、l、n、p 和 q。
支持 C 标准中描述的单字符转义序列。
字符 转义
NULL \0
<alert character> \a
<backspace> \b
<form-feed> \f
<newline> \n
<carriage return> \r
<tab> \t
<vertical tab> \v
转换字符串
hexdump 还支持以下额外的转换字符串用于格式字符串中。
_a[dox] 标记下一个输出字节的偏移量,在输入文件中累积。d、o、x 分别以十进制、八进制和十六进制显示。
_A[dox] 与 _a 转换字符串相同,只是在处理所有输入数据后只执行一次。
_c 在默认字符集中输出字符。非打印字符以三个字符、零填充八进制显示,但可通过标准转义符号(见上文)表示的字符除外。
_p 默认字符集中输出字符。非打印字符显示为单个点号 “.”。
_u 输出美国 ASCII 字符,控制字符使用以下小写名称显示除外。大于 0xff 的字符显示为十六进制字符串。
控制字符如下:
码值 | 名称 | 全称 |
---|---|---|
0x00 | nul | null |
0x01 | soh | start of headline |
0x02 | stx | start of text |
0x03 | etx | end of text |
0x04 | eot | end of transmission |
0x05 | enq | enquiry |
0x06 | ack | acknowledge |
0x07 | bel | bell |
0x08 | bs | backspace |
0x09 | ht | horizontal |
0x0A | lf | line feed |
0x0B | vt | vertical tab |
0x0C | ff | form feed |
0x0D | cr | carriage return |
0x0E | so | shift out |
0x0F | si | shift in |
0x10 | dle | data link escape |
0x11 | dc1 | device control 1 |
0x12 | dc2 | device control 2 |
0x13 | dc3 | device control 3 |
0x14 | dc4 | device control 3 |
0x15 | nak | negative acknowledgement |
0x16 | syn | synchronous idle |
0x17 | etb | end of transmission block |
0x18 | can | cancel |
0x19 | em | end of medium |
0x1A | sub | substitute |
0x1b | esc | escape |
0x1C | fs | file separator |
0x1D | gs | group separator |
0x1E | rs | record separator |
0x1F | us | unit separator |
0x7F | del | delete |
示例
使用vim在文件t2.txt中输入如下内容:
FreeOA.Net
不指定选项缺省以十六进制显示指定文件的内容。
$ hexdump t2.txt
0000000 7246 6565 414f 4e2e 7465 000a
000000b
其中第一列为偏移量。
单字节字符展示。
0000000 F r e e O A . N e t \n
000000b
输出十六进制和对应字符。
00000000 46 72 65 65 4f 41 2e 4e 65 74 0a |FreeOA.Net.|
0000000b
从指定偏移量开始输出。比如偏移3个字节,跳过'Fre'。
hexdump -s3 -C t2.txt
00000003 65 4f 41 2e 4e 65 74 0a |eOA.Net.|
格式化输出并标记每个字节的偏移量。
hexdump -e'/1 "%_ad %02X\n"' t2.txt
0 46
1 72
2 65
*
4 4F
5 41
6 2E
7 4E
8 65
9 74
10 0A
hexdump与od
在Linux中,两命令都用于以十六进制和其他格式显示文件的内容,都提供了对文件进行二进制查看和分析的功能。以下是其简要说明:
od命令:
“od”(octal dump)命令以不同的格式显示文件的内容,默认以八进制格式显示。它可以显示文件的十六进制值、八进制值、ASCII字符或其他格式的数据。
常用选项包括:
“-t”:指定要显示的数据格式,如"-t x"表示十六进制格式,"-t d"表示十进制格式。
“-A”:指定要显示的字符集,如"-A n"表示使用无符号字符(不显示不可打印字符)。
“-c”:以ASCII字符形式显示文件内容。
示例:
显示文件的十六进制格式:od -t x1 file.txt
显示文件的ASCII字符格式:od -c file.txt
hexdump命令:
"hexdump"命令以十六进制和ASCII字符形式显示文件的内容。它以列格式显示文件的十六进制值,并在相邻的列中显示相应的ASCII字符。
常用选项包括:
“-C”:以列格式显示十六进制和ASCII字符。
“-n”:指定要显示的字节数。
“-s”:指定要从文件中开始显示的偏移量。
示例:见上文。
这些命令可以帮助以不同的格式查看文件的内容,特别适用于对二进制文件、内存映像或其他非文本文件进行分析和调试。在功能和用法上有一些区别,尽管它们都用于以十六进制和其他格式显示文件的内容。以下是它们之间的主要区别:
输出格式:"od"命令默认以八进制格式显示文件内容,但可以通过选项来选择其他格式,如十六进制或十进制。它可以显示文件的十六进制值、八进制值、ASCII字符或其他格式的数据。而"hexdump"命令以十六进制和ASCII字符形式显示文件内容,并以列格式呈现,将相邻的十六进制值和ASCII字符显示在一起。
默认显示:"od"命令默认情况下显示文件的所有字节,包括不可打印字符。它显示文件的每个字节的八进制值,并且可以通过选项来选择不同的显示格式。而"hexdump"命令默认只显示可打印字符的十六进制值和ASCII字符,不显示不可打印字符。
可读性:"hexdump"命令以列格式显示文件内容,将十六进制值和ASCII字符一一对应显示,更易于人类阅读和分析。它提供了一种更直观的方式来查看文件的内容。相比之下,"od"命令以行格式显示文件内容,可能不太直观,需要更多的解析和解读。
选项和功能:"od"命令提供了更多的选项来自定义输出格式和显示内容,例如选择不同的数据格式、指定字符集和显示地址等。它还可以处理更广泛的数据类型,并具有更多的功能,如显示文件的文件偏移量和文件指针位置。而"hexdump"命令提供了一些简单的选项,如指定显示格式、显示字节数等,但功能相对较简单。
最新版本:1.8
使用C99 bools,通过了cppcheck审计,并添加一个回归分析测试。
项目主页:http://www.catb.org/~esr/hexdump/