2024年Go最新objdump命令详解(2),面试题bug的生命周期

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

从objfile中反汇编那些特定指令机器码的section。

-D
–disassemble-all
与 -d 类似,但反汇编所有section.

-EB
-EL
–endian={big|little}
指定目标文件的小端。这个项将影响反汇编出来的指令。在反汇编的文件没描述小端信息的时候用。例如S-records.

-f
–file-headers
显示objfile中每个文件的整体头部摘要信息。

-h
–section-headers
–headers
显示目标文件各个section的头部摘要信息。

-H
–help
简短的帮助信息。

-i
–info
显示对于 -b 或者 -m 选项可用的架构和目标格式列表。

-j name
–section=name
仅仅显示指定名称为name的section的信息

-l
–line-numbers
用文件名和行号标注相应的目标代码,仅仅和-d、-D或者-r一起使用使用-ld和使用-d的区别不是很大,在源码级调试的时候有用,要求编译时使用了-g之类的调试编译选项。

-m machine
–architecture=machine
指定反汇编目标文件时使用的架构,当待反汇编文件本身没描述架构信息的时候(比如S-records),这个选项很有用。可以用-i选项列出这里能够指定的架构.

–reloc
-r
显示文件的重定位入口。如果和-d或者-D一起使用,重定位部分以反汇编后的格式显示出来。

–dynamic-reloc
-R
显示文件的动态重定位入口,仅仅对于动态目标文件意义,比如某些共享库。

-s
–full-contents
显示指定section的完整内容。默认所有的非空section都会被显示。

-S
–source
尽可能反汇编出源代码,尤其当编译的时候指定了-g这种调试参数时,效果比较明显。隐含了-d参数。

–show-raw-insn
反汇编的时候,显示每条汇编指令对应的机器码,如不指定–prefix-addresses,这将是缺省选项。

–no-show-raw-insn
反汇编时,不显示汇编指令的机器码,如不指定–prefix-addresses,这将是缺省选项。

–start-address=address
从指定地址开始显示数据,该选项影响-d、-r和-s选项的输出。

–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选项,那么目标文件就不包含调试信息,那么显示效果就差多了。



![img](https://img-blog.csdnimg.cn/img_convert/97549276bcf9d62241831e8f4fdf7cb6.png)
![img](https://img-blog.csdnimg.cn/img_convert/7a6edc7c422ee089597626e055a3481b.png)
![img](https://img-blog.csdnimg.cn/img_convert/fdabf7e85aafc7c70ad2c239b20663a0.png)

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!**

**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**

**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618658159)**

的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!**

**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**

**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618658159)**

  • 22
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值