- A+
介绍
hexdump是linux中一个查看二进制文件的指令。实际上所有的普通文件都可以用这个指令来查看,并不限定于非得是二进制文件。可用十六进制、十进制、八进制数或 ASCII 码显示二进制文件内容的工具。它是个用于检查的工具,也可用于数据恢复、逆向工程和编程。
参数
[root@k3s ~]# hexdump -h hexdump:无效选项 -- h 用法: hexdump [选项] 文件 ... 选项: -b 单字节八进制显示 -c 单字节字符显示 -C 规范化 十六进制+ASCII 显示 -d 两字节十进制显示 -o 两字节八进制显示 -x 两字节十六进制显示 -e 格式 用于显示数据的格式字符串 -f 格式文件 包含格式字符串的文件 -n 长度 只解释输入的指定长度个字节 -s 偏移 跳过开头指定长度个字节 -v 显示时不压缩相似的行 -V 显示此帮助并退出
查看图片类型
我们随便找了个图片(line.png),将后面的后缀去掉位line,然后我们用file命令查看其类型,如下:
[root@k3s ~]# file line line: PNG image data, 41 x 100, 8-bit/color RGBA, non-interlaced
那么这个结果是怎么得来的呢,你可以用 -C 选项将输出结果,或至少是其中可翻译的部分,翻译成更加熟悉的内容,如下:
[root@k3s ~]# hexdump -C line 00000000 89 50 4e 47 0d 0a 1a 0a 00 00 00 0d 49 48 44 52 |.PNG........IHDR| 00000010 00 00 00 29 00 00 00 64 08 06 00 00 00 1b a6 19 |...)...d........| 00000020 44 00 00 00 19 74 45 58 74 53 6f 66 74 77 61 72 |D....tEXtSoftwar| 00000030 65 00 41 64 6f 62 65 20 49 6d 61 67 65 52 65 61 |e.Adobe ImageRea| 00000040 64 79 71 c9 65 3c 00 00 03 28 69 54 58 74 58 4d |dyq.e<...(iTXtXM| 00000050 4c 3a 63 6f 6d 2e 61 64 6f 62 65 2e 78 6d 70 00 |L:com.adobe.xmp.| 00000060 00 00 00 00 3c 3f 78 70 61 63 6b 65 74 20 62 65 |....<?xpacket be| 00000070 67 69 6e 3d 22 ef bb bf 22 20 69 64 3d 22 57 35 |gin="..." id="W5| 00000080 4d 30 4d 70 43 65 68 69 48 7a 72 65 53 7a 4e 54 |M0MpCehiHzreSzNT| 00000090 63 7a 6b 63 39 64 22 3f 3e 20 3c 78 3a 78 6d 70 |czkc9d"?> <x:xmp| 000000a0 6d 65 74 61 20 78 6d 6c 6e 73 3a 78 3d 22 61 64 |meta xmlns:x="ad| 000000b0 6f 62 65 3a 6e 73 3a 6d 65 74 61 2f 22 20 78 3a |obe:ns:meta/" x:| 000000c0 78 6d 70 74 6b 3d 22 41 64 6f 62 65 20 58 4d 50 |xmptk="Adobe XMP| 000000d0 20 43 6f 72 65 20 35 2e 36 2d 63 31 33 38 20 37 | Core 5.6-c138 7| 000000e0 39 2e 31 35 39 38 32 34 2c 20 32 30 31 36 2f 30 |9.159824, 2016/0| 000000f0 39 2f 31 34 2d 30 31 3a 30 39 3a 30 31 20 20 20 |9/14-01:09:01 | 00000100 20 20 20 20 20 22 3e 20 3c 72 64 66 3a 52 44 46 | "> <rdf:RDF| 00000110 20 78 6d 6c 6e 73 3a 72 64 66 3d 22 68 74 74 70 | xmlns:rdf="http| 00000120 3a 2f 2f 77 77 77 2e 77 33 2e 6f 72 67 2f 31 39 |://www.w3.org/19| 00000130 39 39 2f 30 32 2f 32 32 2d 72 64 66 2d 73 79 6e |99/02/22-rdf-syn| 00000140 74 61 78 2d 6e 73 23 22 3e 20 3c 72 64 66 3a 44 |tax-ns#"> <rdf:D| 00000150 65 73 63 72 69 70 74 69 6f 6e 20 72 64 66 3a 61 |escription rdf:a| 00000160 62 6f 75 74 3d 22 22 20 78 6d 6c 6e 73 3a 78 6d |bout="" xmlns:xm| 00000170 70 3d 22 68 74 74 70 3a 2f 2f 6e 73 2e 61 64 6f |p="http://ns.ado| 00000180 62 65 2e 63 6f 6d 2f 78 61 70 2f 31 2e 30 2f 22 |be.com/xap/1.0/"| 00000190 20 78 6d 6c 6e 73 3a 78 6d 70 4d 4d 3d 22 68 74 | xmlns:xmpMM="ht| 000001a0 74 70 3a 2f 2f 6e 73 2e 61 64 6f 62 65 2e 63 6f |tp://ns.adobe.co| 000001b0 6d 2f 78 61 70 2f 31 2e 30 2f 6d 6d 2f 22 20 78 |m/xap/1.0/mm/" x| 000001c0 6d 6c 6e 73 3a 73 74 52 65 66 3d 22 68 74 74 70 |mlns:stRef="http| 000001d0 3a 2f 2f 6e 73 2e 61 64 6f 62 65 2e 63 6f 6d 2f |://ns.adobe.com/| 000001e0 78 61 70 2f 31 2e 30 2f 73 54 79 70 65 2f 52 65 |xap/1.0/sType/Re| 000001f0 73 6f 75 72 63 65 52 65 66 23 22 20 78 6d 70 3a |sourceRef#" xmp:| 00000200 43 72 65 61 74 6f 72 54 6f 6f 6c 3d 22 41 64 6f |CreatorTool="Ado| 00000210 62 65 20 50 68 6f 74 6f 73 68 6f 70 20 43 43 20 |be Photoshop CC | 00000220 32 30 31 37 20 28 4d 61 63 69 6e 74 6f 73 68 29 |2017 (Macintosh)| 00000230 22 20 78 6d 70 4d 4d 3a 49 6e 73 74 61 6e 63 65 |" xmpMM:Instance| 00000240 49 44 3d 22 78 6d 70 2e 69 69 64 3a 38 37 43 44 |ID="xmp.iid:87CD| 00000250 31 32 31 45 43 39 30 44 31 31 45 38 39 37 33 37 |121EC90D11E89737| 00000260 45 36 42 43 30 33 44 32 32 42 31 38 22 20 78 6d |E6BC03D22B18" xm| 00000270 70 4d 4d 3a 44 6f 63 75 6d 65 6e 74 49 44 3d 22 |pMM:DocumentID="| 00000280 78 6d 70 2e 64 69 64 3a 38 37 43 44 31 32 31 46 |xmp.did:87CD121F| 00000290 43 39 30 44 31 31 45 38 39 37 33 37 45 36 42 43 |C90D11E89737E6BC| 000002a0 30 33 44 32 32 42 31 38 22 3e 20 3c 78 6d 70 4d |03D22B18"> <xmpM| 000002b0 4d 3a 44 65 72 69 76 65 64 46 72 6f 6d 20 73 74 |M:DerivedFrom st| 000002c0 52 65 66 3a 69 6e 73 74 61 6e 63 65 49 44 3d 22 |Ref:instanceID="| 000002d0 78 6d 70 2e 69 69 64 3a 34 31 32 43 39 39 46 46 |xmp.iid:412C99FF| 000002e0 43 39 30 44 31 31 45 38 39 37 33 37 45 36 42 43 |C90D11E89737E6BC| 000002f0 30 33 44 32 32 42 31 38 22 20 73 74 52 65 66 3a |03D22B18" stRef:| 00000300 64 6f 63 75 6d 65 6e 74 49 44 3d 22 78 6d 70 2e |documentID="xmp.| 00000310 64 69 64 3a 34 31 32 43 39 41 30 30 43 39 30 44 |did:412C9A00C90D| 00000320 31 31 45 38 39 37 33 37 45 36 42 43 30 33 44 32 |11E89737E6BC03D2| 00000330 32 42 31 38 22 2f 3e 20 3c 2f 72 64 66 3a 44 65 |2B18"/> </rdf:De| 00000340 73 63 72 69 70 74 69 6f 6e 3e 20 3c 2f 72 64 66 |scription> </rdf| 00000350 3a 52 44 46 3e 20 3c 2f 78 3a 78 6d 70 6d 65 74 |:RDF> </x:xmpmet| 00000360 61 3e 20 3c 3f 78 70 61 63 6b 65 74 20 65 6e 64 |a> <?xpacket end| 00000370 3d 22 72 22 3f 3e 13 ed 64 f8 00 00 00 80 49 44 |="r"?>..d.....ID| 00000380 41 54 78 da ec db b1 0d c0 20 0c 00 41 8c d2 66 |ATx...... ..A..f| 00000390 31 06 61 a8 0c 92 c5 32 80 33 00 5d 44 01 d1 7d |1.a....2.3.]D..}| 000003a0 6f e9 24 57 2e 1c 99 59 56 af 96 0d 82 84 84 84 |o.$W...YV.......| 000003b0 84 84 84 84 84 84 84 84 fc 13 f2 f8 3a f8 dc 7d |............:..}| 000003c0 ea 99 79 b6 2b ac 1b 12 12 12 12 12 12 12 12 12 |..y.+...........| 000003d0 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 |................| 000003e0 12 12 12 12 12 12 12 12 72 4a e1 8b 04 12 12 12 |........rJ......| 000003f0 12 12 12 12 12 12 12 12 12 72 e8 15 60 00 af 9c |.........r..`...| 00000400 0a c3 d6 e1 da 56 00 00 00 00 49 45 4e 44 ae 42 |.....V....IEND.B| 00000410 60 82 |`.| 00000412
在右侧的列中,你看到的是和左侧一样的数据,但是以 ASCII 码展现的。如果你仔细看,你可以从中挑选出一些有用的信息,如文件格式(PNG)以及文件创建、修改日期和时间(向文件底部寻找一下)。
file 命令通过头 8 个字节获取文件类型。程序员会参考 libpng 规范 来知晓需要查看什么。具体而言,那就是你能在该图像文件的头 8 个字节中看到的字符串 PNG。这个事实显而易见,因为它揭示了 file 命令是如何知道要报告的文件类型。
你也可以控制 hexdump 显示多少字节,这在处理大于一个像素的文件时很实用,如下:
[root@k3s ~]# hexdump -C -n 8 line 00000000 89 50 4e 47 0d 0a 1a 0a |.PNG....| 00000008
你可以让 hexdump -n 8 的输出结果跟 libpng 官方规范中描述的 PNG 文件头相匹配,如下:
[root@k3s ~]# hexdump -n8 -e '30/1 "%d ""\n"' line 137 80 78 71 13 10 26 10
hexdump 不只限于查看 PNG 或图像文件。你也可以用 hexdump 查看你日常使用的二进制文件,如 ls、rsync,或你想检查的任何二进制文件。
查看文件
源文件如下:
[root@k3s ~]# cat max.c #include <stdio.h> int main() { int a = 100; int b = 200; int ret; ret = max(a, b); return ret; } int max(int num1, int num2) { /* 局部变量声明 */ int result; if (num1 > num2) result = num1; else result = num2; return result; }
hexdump通过-e格式化文件内容,如下:
[root@k3s ~]# hexdump -e '"%_p"' max.c #include <stdio.h>.int main().{. * int a = 10* ;. * int b = 20* ;. * int ret;. * ret = max(a, b);. return ret;.}.int max(int num1, int num2).{. * /* .................. */. * int result;.* * if (num1 > num2). * result = num1;. * else. * result = num2;.* * return result;.}.
字符串 %_p 告诉 hexdump 用你系统的默认字符集输出字符。-e 选项的所有格式符号必须以单引号包括起来.你也可以用附加选项强制 hexdump 一次处理 30 字节。具体而言,通过 30 除以 1 这种形式,你可以告诉 hexdump将 30 字节作为一个单元对待,如下:
[root@k3s ~]# hexdump -e '30/1 "%_p""\n"' max.c #include <stdio.h>.int main(). {. int a = 100;. int b = 20 0;. int ret;. ret = max(a, b);. return ret;.}.int max(in t num1, int num2).{. /* .... .............. */. int resul t;.. if (num1 > num2). result = num1;. else. r esult = num2;.. return resul t;.}.
- 安卓客户端下载
- 微信扫一扫
- 微信公众号
- 微信公众号扫一扫