Linux下查看二进制文件

我们在日常开发中有时候会遇到查看二进制文件的场景,直接打开的话往往会让我们直呼外星人。此时我们就需要各种二进制查看工具了,帮助我们更好的查看二进制文件。

hexdump 查看二进制文件

hexdump 是 linux 下一个用于查看二进制文件的命令,它可以将二进制文件转换成十六进制的格式并打印出来,结果如下:

此外 hexdump 提供了各种选项实现数据格式的转换:

hexdump -C Main7.class

显示文件的 ASCII格式

-C 命令可以显示对应字节的ASCII格式,并追加到最后面。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
root@74f21669baa4:/ctf/work/competition/2022xiangyuncup/unexp # hexdump -C dump                                                   
00000000 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 |.ELF............|
00000010 03 00 3e 00 01 00 00 00 00 00 00 00 00 00 00 00 |..>.............|
00000020 40 00 00 00 00 00 00 00 38 0e 00 00 00 00 00 00 |@.......8.......|
00000030 00 00 00 00 40 00 38 00 04 00 40 00 10 00 0f 00 |....@.8...@.....|
00000040 01 00 00 00 05 00 00 00 00 00 00 00 00 00 00 00 |................|
00000050 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000060 7c 0d 00 00 00 00 00 00 7c 0d 00 00 00 00 00 00 ||.......|.......|
00000070 00 10 00 00 00 00 00 00 02 00 00 00 04 00 00 00 |................|
00000080 e0 03 00 00 00 00 00 00 e0 03 00 00 00 00 00 00 |................|
00000090 e0 03 00 00 00 00 00 00 20 01 00 00 00 00 00 00 |........ .......|
000000a0 20 01 00 00 00 00 00 00 08 00 00 00 00 00 00 00 | ...............|
000000b0 04 00 00 00 04 00 00 00 00 05 00 00 00 00 00 00 |................|
000000c0 00 05 00 00 00 00 00 00 00 05 00 00 00 00 00 00 |................|

hexdump -b Main7.class

以单字节转换为八进制显示目标二进制文件

-b选项会将所有数据以单字节为单位转换为十进制的格式显示,如这里第0个位置十六字节的fe对应的十进制为 312等。

1
2
3
4
5
6
7
8
9
root@74f21669baa4:/ctf/work/competition/2022xiangyuncup/unexp # hexdump -b dump                 
0000000 177 105 114 106 002 001 001 000 000 000 000 000 000 000 000 000
0000010 003 000 076 000 001 000 000 000 000 000 000 000 000 000 000 000
0000020 100 000 000 000 000 000 000 000 070 016 000 000 000 000 000 000
0000030 000 000 000 000 100 000 070 000 004 000 100 000 020 000 017 000
0000040 001 000 000 000 005 000 000 000 000 000 000 000 000 000 000 000
0000050 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000
0000060 174 015 000 000 000 000 000 000 174 015 000 000 000 000 000 000
0000070 000 020 000 000 000 000 000 000 002 000 000 000 004 000 000 000

xxd命令查看二进制文件

xxd 命令的直接使用与 hexdump -C的格式类似,打印的结果包含地址,十六进制格式和字符格式(单字节为单位)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
root@74f21669baa4:/ctf/work/competition/2022xiangyuncup/unexp # xxd dump
00000000: 7f45 4c46 0201 0100 0000 0000 0000 0000 .ELF............
00000010: 0300 3e00 0100 0000 0000 0000 0000 0000 ..>.............
00000020: 4000 0000 0000 0000 380e 0000 0000 0000 @.......8.......
00000030: 0000 0000 4000 3800 0400 4000 1000 0f00 ....@.8...@.....
00000040: 0100 0000 0500 0000 0000 0000 0000 0000 ................
00000050: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000060: 7c0d 0000 0000 0000 7c0d 0000 0000 0000 |.......|.......
00000070: 0010 0000 0000 0000 0200 0000 0400 0000 ................
00000080: e003 0000 0000 0000 e003 0000 0000 0000 ................
00000090: e003 0000 0000 0000 2001 0000 0000 0000 ........ .......
000000a0: 2001 0000 0000 0000 0800 0000 0000 0000 ...............
000000b0: 0400 0000 0400 0000 0005 0000 0000 0000 ................
000000c0: 0005 0000 0000 0000 0005 0000 0000 0000 ................
000000d0: 6400 0000 0000 0000 6400 0000 0000 0000 d.......d.......
000000e0: 0400 0000 0000 0000 50e5 7464 0400 0000 ........P.td....

使用 od命令查看二进制文件

od命令与上述两种命令有所区别,是它的显示格式与前两者不同,通过 od 命令可以打印出二进制文件的 十六进制格式和 十进制的格式。

1
[root@node01 demo02]# od -tx1 -tc -Ax Main7.class
  • -tx1选项表示将文件中的字节以十六进制的形式列出来,每组一个字节(类似hexdump的-c选项)
  • -tc选项表示将文件中的ASCII码以字符形式列出来(和hexdump类似,输出结果最左边的一列是文件中的地址,默认以八进制显示)
  • -Ax选项要求以十六进制显示文件中的地址
  • -A显示地址索引,根据指定的格式显示地址。示例:-Ax以十六进制格式显示地址;-Ad以十进制格式显示地址;-Ao以八进制格式显示地址;-An不显示地址。
  • -t 指定输出格式,可以指定多个输出格式,对应列举出来。示例:-tx1 -tc表示分别以十六进制,一字节为单位;和ASCII格式,一字节为单位显示数据。