Linux命令:hexdump
hexdump是Linux下的一个二进制文件查看工具,它可以将二进制文件转换为ASCII、八进制、十进制、十六进制格式进行查看。 指令所在路径:/usr/bin/hexdump ? ? 命令语法: ? hexdump: [-bcCdovx] [-e fmt] [-f fmt_file] [-n length] [-s skip] [file ...] ? ? ? 命令参数: ? ? 此命令参数是Red Hat Enterprise Linux Server release 5.7下hexdump命令参数,不同版本Linux的hexdump命令参数有可能不同。
? 使用示例: ?
hexdump高级用法:
?
-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: 查看hexdmp命令的帮助信息 [[email?protected] ~]# man hexdump ? 2: 以8进制显示文件里面的字符。 [[email?protected] ~]# cat >test.txt ABCDEF??? GHIJKM 123456 [[email?protected] ~]#? hexdump -b test.txt 0000000 101 102 103 104 105 106 012 107 110 111 112 113 115 012 061 062 0000010 063 064 065 066 012??????????????????????????????????????????? 0000015 注意:一行共16个字节,一行开始以十六进制显示偏移值(如下所示,第一行字符串只显示到D,第十六个字节,后面的F12*DFDF换行显示) [[email?protected] ~]# cat >test.txt ABCDEFGHIJKLMNODF12*DFDF ? [2]+? Stopped???????????????? cat > test.txt You have new mail in /var/spool/mail/root [[email?protected] ~]# hexdump -b test.txt 0000000 101 102 103 104 105 106 107 110 111 112 113 114 115 116 117 104 0000010 106 061 062 052 104 106 104 106 012??????????????????????????? 0000019 [[email?protected] ~]# hexdump -c test.txt 0000000?? A?? B?? C?? D?? E?? F?? G?? H?? I?? J?? K?? L?? M?? N?? O?? D 0000010?? F?? 1?? 2?? *?? D?? F?? D?? F? n??????????????????????????? 0000019 ? ? 3:以ASCII字符显示文件中字符 [[email?protected] ~]# hexdump -c test.txt 0000000?? A?? B?? C?? D?? E?? F?? G?? H?? I?? J?? K?? L?? M?? N?? O?? D 0000010?? F?? 1?? 2?? *?? D?? F?? D?? F? n??????????????????????????? 0000019 ? hexdump 以ASCII字符显示时,可以输出换行符,这个功能可以用来检查文件是Linux的换行符格式还是Widows格式换行符。如下所示 ? ? 4:以16进制和相应的ASCII字符显示文件里的字符 [[email?protected] ~]# hexdump -C test.txt 00000000? 41 42 43 44 45 46 47 48? 49 4a 4b 4c 4d 4e 4f 44? |ABCDEFGHIJKLMNOD| 00000010? 46 31 32 2a 44 46 44 46? 0a?????????????????????? |F12*DFDF.| 00000019 ? 5:只格式文件中前n个字符 [[email?protected] ~]# hexdump -C -n 5 test.txt 00000000? 41 42 43 44 45??????????????????????????????????? |ABCDE| 00000005 ? 6:以偏移量开始格式输出。如下所示指定参数-s 5 ,前面的ABCDE字符没有了。 ? [[email?protected] ~]# hexdump -C test.txt 00000000? 41 42 43 44 45 46 47 48? 49 4a 4b 4c 4d 4e 4f 44? |ABCDEFGHIJKLMNOD| 00000010? 46 31 32 2a 44 46 44 46? 0a?????????????????????? |F12*DFDF.| 00000019 [[email?protected] ~]# hexdump -C -s 5 test.txt 00000005? 46 47 48 49 4a 4b 4c 4d? 4e 4f 44 46 31 32 2a 44? |FGHIJKLMNODF12*D| 00000015? 46 44 46 0a?????????????????????????????????????? |FDF.| 使用举例 C语言保存二进制文件test #include <stdio.h> int main() { 格式化输出文件 hexdump test 格式化输出文件的前10个字节 hexdump -n 10 test 格式化输出文件的前10个字节,并以16进制显示 hexdump -n 10 -C test 格式化输出从10开始的10个字节,并以16进制显示 hexdump -n 10 -C -s 20 格式化输出文件字符 hexdump -e ‘16/1 “%02X ” ” | “’ -e ‘16/1 “%_p” “n”’ test hexdump -e ‘1/1 “0x%08_ax “’ -e ‘8/1 “%02X ” ” * “’ -e ‘8/1 “%_p” “n”’ test hexdump -e ‘1/1 “%02_ad# “’ -e ‘/1 “hex = %02X * “’ -e ‘/1 “dec = %03d | “’ -e ‘/1 “oct = %03o”’ -e ‘/1 ” _n”’ -n 20 test (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |