网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
–stop-address=address
显示数据直到指定地址为止,该项影响-d、-r和-s选项的输出。
-t
–syms
显示文件的符号表入口。类似于nm -s提供的信息
-T
–dynamic-syms
显示文件的动态符号表入口,仅仅对动态目标文件意义,比如某些共享库。它显示的信息类似于 nm -D|–dynamic 显示的信息。
-V
–version
版本信息
–all-headers
-x
显示所可用的头信息,包括符号表、重定位入口。-x 等价于-a -f -h -r -t 同时指定。
-z
–disassemble-zeroes
一般反汇编输出将省略大块的零,该选项使得这些零块也被反汇编。
@file 可以将选项集中到一个文件中,然后使用这个@file选项载入。
##### 实例
首先,在给出后面大部分测试所基于的源代码以及编译指令。 源代码如下:
mytest.cpp
#include<stdio.h>
void exploit()
{
system(“/bin/sh”);
}
void func()
{
char str[0x20];
read(0, str, 0x50);
}
int main()
{
func();
return 0;
}
编译:
gcc -c -g -o mytest mytest.c
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200407222848226.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxNjgzMzA1,size_16,color_FFFFFF,t_70)
**查看当前使用的objdump的版本号:**
objdump -V
![在这里插入图片描述](https://img-blog.csdnimg.cn/2020040722293467.png)
**显示可用的架构和目标结构列表:**
objdump -i
![在这里插入图片描述](https://img-blog.csdnimg.cn/202004072232580.png)
**显示mytest文件中的text段的内容:**
objdump --section=.text -s mytest
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200407223435752.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxNjgzMzA1,size_16,color_FFFFFF,t_70)
这里注意,不能单独使用-j或者–section,例如`objdump --section=.text mytest`是不会运行成功的。
**反汇编mytest中的text段内容,并尽可能用源代码形式表示:**
objdump -j .text -S mytest
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200407223816180.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxNjgzMzA1,size_16,color_FFFFFF,t_70)
这里注意,不能单独使用-j或者–section,例如`objdump -j .text mytest`是不会运行成功的。另外-S命令对于包含调试信息的目标文件,显示的效果比较好,如果编译时没有指定-g选项,那么目标文件就不包含调试信息,那么显示效果就差多了。
**反汇编出mytest.o的源代码:**
objdump -S mytest
![在这里插入图片描述](https://img-blog.csdnimg.cn/2020040722401169.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxNjgzMzA1,size_16,color_FFFFFF,t_70)
这里,尤其当编译的时候指定了-g这种调试参数时,反汇编的效果比较明显。隐含了-d参数。
**显示文件的符号表入口:**
objdump -t mytest
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200407224112592.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxNjgzMzA1,size_16,color_FFFFFF,t_70)
**显示文件的符号表入口,将底层符号解码并表示成用户级别:**
*objdump -t -C mytest*
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200407224221494.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxNjgzMzA1,size_16,color_FFFFFF,t_70)
**反汇编目标文件的特定机器码段:**
objdump -d mytest
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200407224321750.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxNjgzMzA1,size_16,color_FFFFFF,t_70)
这里,对text段的内容进行了反汇编。
**反汇编特定段,并将汇编代码对应的文件名称和行号对应上:**
objdump -d -l mytest
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200407224448782.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxNjgzMzA1,size_16,color_FFFFFF,t_70)
这里,项"-d"从objfile中反汇编那些特定指令机器码的section,而使用"-l"指定用文件名和行号标注相应的目标代码,仅仅和-d、-D或者-r一起使用,使用-ld和使用-d的区别不是很大,在源码级调试的时候有用,要求编译时使用了-g之类的调试编译选项。
**显示目标文件各个段的头部摘要信息:**
![img](https://img-blog.csdnimg.cn/img_convert/5908b9d0a7df1a68324f8f225dadc977.png)
![img](https://img-blog.csdnimg.cn/img_convert/a5053c405687e0b8652d3fbcbb3f12a2.png)
![img](https://img-blog.csdnimg.cn/img_convert/914c0080bd5807b733ad61b65d5bcd64.png)
**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!**
**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**
**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618658159)**
的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!**
**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**
**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618658159)**