Ubuntu学习记录2——objdump

本文介绍了Ubuntu中objdump的用途,它是GCC编译器的一部分,主要用于程序的反汇编。通过讲解objdump的基本概念和常用参数,如-S参数用于显示C源代码和反汇编的对照,帮助读者理解如何利用objdump进行编译调试。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


objdump是什么

objdump是gcc编译器中的一个指令,功能是反汇编,gcc是GNU C语言编译器(GNU C Compiler),GNU是一个计划或者说运动,然后很多人在这个计划中开发了gcc等,大概这样,贴个知乎链接,我感觉通俗易懂(GNU 是什么,和 Linux 是什么关系?
这个指令有一堆参数,这些参数负责告诉编译器怎么干活、把活干到什么程度,比如 -S 表示输出C源代码和反汇编出来的指令对照的格式,那你如果想要看C源代码和反汇编出来的指令对照,那就在指令后面加上这个参数。
下面是objdump指令的参数们:

objdump参数

先贴个链接,这个网站里面Linux命令参数蛮全的
objdump命令参数

下面复制一下我整理之后的参数表:

-a 显示档案库的成员信息,类似ls -l将lib*.a的信息列出。 
-b 指定目标码格式。这不是必须的,objdump能自动识别许多格式,比如: 
	objdump 
### 使用 `objdump` 工具的方法 #### 安装 `objdump` 为了使用 `objdump`,通常需要安装 `binutils` 软件包。该软件包包含了多种用于处理目标文件和二进制文件的工具,其中包括 `objdump`。 可以通过以下命令来确保已安装此工具: ```bash sudo apt update && sudo apt install binutils ``` 如果已经安装,则无需重复操作[^1]。 #### 基本语法结构 `objdump` 的基本调用格式如下所示: ```bash objdump [选项] 文件名... ``` 其中,“选项”可以指定不同的输出模式;而“文件名...”则代表要分析的一个或多个可执行文件、库或其他类型的二进制对象文件。 #### 查看反汇编代码 当希望查看给定程序的机器码对应的汇编指令时,可以采用 `-d` 参数来进行反汇编: ```bash objdump -d /path/to/binary ``` 这条命令会显示由链接器产生的最终版本的目标代码中的函数及其地址偏移量以及相应的汇编指令序列。 #### 显示头信息 对于了解 ELF (Executable and Linkable Format) 文件头部的内容而言,利用 `-f` 参 数非常有用: ```bash objdump -f /path/to/binary ``` 这将提供有关架构类型、入口点位置以及其他重要属性的数据。 #### 列出符号表项 通过加入 `-t` 开关能够打印出符号表内的条目列表,这对于调试期间追踪变量定义很有帮助: ```bash objdump -t /path/to/binary ``` 上述命令有助于识别特定名称所关联的位置信息和其他元数据。 #### 结合其他参数获取更详细的输出 有时可能还需要更加详尽的信息,比如同时展示源代码行号映射关系或是静态初始化部分等细节,在这种情况下就可以组合更多可用开关一起使用了。例如下面的例子展示了如何一次性获得尽可能多的相关资料: ```bash objdump --source --disassemble-all --demangle /path/to/binary ``` 这里用了三个附加标志位:`--source` 表明也应包含原始 C/C++ 代码片段(如果有),`--disassemble-all` 是指即使是在未标记为可执行的部分也要尝试解码成汇编语句形式,最后一个是告诉 `objdump` 将内部使用的特殊命名转换回程序员熟悉的常规名字表示方式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值