Linux C程序的调试
这里我们会用到一些更高级的工具
objdump
objdump命令是Linux下的反汇编目标文件或者可执行文件的命令,当然,它还有其他作用
这个程序在Ubuntu中是已经预装了的
下面还是以我们的11.c源文件编译的可执行文件11为例子做演示
1. 显示文件头信息
文件头信息是判定文件类型的
我们执行
objdump -f 11
我们的文件类型是elf64-x86-64,说明我们的11是ELF的64位可执行文件
下面的architecture是架构的意思,我们编译环境是x86-64
2. 反汇编需执行指令的section
我们执行
objdump -d 11
3. 反汇编所有section
objdump -D 11
4. 显示section的header信息
objdump -h 11
5. 显示所有header信息
objdump -x 11
6. 显示所有header信息
这个显示是以<16进制>来显示的
objdump -s 11
下面我们用几个简单列子来演示使用objdump
0x01 输出源代码和汇编对照
编译的时候要加-g选项
objdump -S 11
前面都是一些程序的预处理操作
我们要的main函数在这里
0x02 显示程序text段内容
objdump --section=.text -s 11
结果如下
这里注意,不能单独使用-j或者--section
更多的选项可以常见man手册
readelf
这个工具和objdump差不多,但是它显示的信息更为具体,并且它不依赖BFD库
这个程序也是在Ubuntu中就预装了
1. 显示文件头信息
我们还是用原来那个可执行文件11来做演示
执行
readelf -h 11
结果
2. 显示文件头表信息
readelf -l 11
结果
3. 显示所有信息
这个就简单暴力了
readelf -all 11
结果
等等
这两个命令主要面对的是汇编调试或者二进制分析
下节我们介绍几个文件类型检查和病毒文件测试分析的小技巧命令