上海黄浦 网站建设,网站手机源码,金华做网站最专业的公司,现代锦州网站建设上一篇文章学习了ar工具与nm工具#xff0c;点击链接查看上一篇文章#xff1a;点击链接
本片文章学习记录以下三个工具:
objdumpsizestrings
1、objdump工具
用法#xff1a; 反汇编目标文件#xff0c;查看汇编到源码的映射#xff08;后面代码案例分析看具体区别点击链接查看上一篇文章点击链接
本片文章学习记录以下三个工具:
objdumpsizestrings
1、objdump工具
用法 反汇编目标文件查看汇编到源码的映射后面代码案例分析看具体区别 objdump -d func.oobjdump -S func.o 查看目标文件中的详细段信息 objdump -h test.o
其中objdump -h的输出需要说明一下后面有例子说明
1.1、代码案例
还是以上一篇文章的代码来说明运行时出错但是不影响我们本次的实验
test.c
#include stdio.hint g_global 0;
int g_test 1;extern int* g_pointer;
extern void func();int main(int argc, char *argv[])
{printf(g_global %p\n, g_global);printf(g_test %p\n, g_test);printf(g_pointer %p\n, g_pointer);printf(g_pointer %p\n, g_pointer);printf(func %p\n, func);printf(main %p\n, main);func();return 0;
}func.c
#include stdio.hint* g_pointer;void func()
{*g_pointer (int)D.T.Software;return;
}对上述代码进行编译
gcc -g -c func.c -o func.ogcc -g -c test.c -o test.ogcc func.c test.c -o lyy
然后使用objdump -d命令进行反汇编
objdump -d func.o
结果如下
很明显我们得到了func.o的反汇编文件。但是上来看这个反汇编文件也很是不方便如果能够将源代码与汇编代码对应的看就好了。objdump -S正具有这个功能
使用objdump -S进行反汇编
objdump -S func.o
结果如下
结果显而易见我们可以看到源代码与汇编语言的的对照。
使用objdump -h查看目标文件中的详细段信息
objdump -h test.o
结果如下
上述对应的每一列的内容在上面的表格中已经有所说明。需要注意的地方是VMA与LMA这两列内容一般情况下是相等的。并且在上面的例子中我们看到它们对应的列都是0其实是因为test.o目标文件是没有链接的文件它的加载地址都还是不确定的所以在这里就直接是0.
VMM是虚拟内存地址实际上就是进程的地址空间中的地址此时程序的一个副本进程已经运行起来了它的加载地址LMA就是加载到虚拟地址空间中的地址。所以LMA与VMA相等。
比如我们对可执行文件lyy进行查询
objdump -h lyy
显示如下不全
很明显此时的lyy是可执行文件是已经链接好的文件所以它的VMA与LMA都有具体的值。并且相等。
2、size工具
size工具可以获取目标文件中所有段的大小
如
size test.o
3、strings工具
获取目标文件中的所有字符串常量
如
strings test.o
很明显双引号下的字符串都是字符串常量。
4、总结
学会使用objdump工具-d -S -h这三个选项的含义学会使用size工具查看目标文件各个段的大小学会使用strings工具查看目标文件的所有字符串常量
本文参考狄泰软件学院相关课程 想学习的可以加狄泰软件学院群 群聊号码199546072
学习探讨加个人可以免费帮忙下载CSDN资源 qq1126137994 微信liu1126137994