objdump(GCC)命令的用法

本文介绍如何通过objdump工具查看Linux内核的源代码信息,包括如何在编译时加入debug信息、生成预处理文件、显示内核段信息、反汇编指定段等操作。

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

如何使用 objdump 查看源代码
1. 在编译时必须使用-g选项,-g意为debug,一般可以修改源代码的 Makefile来实现 如:
CC =$(CROSSCOM_PILE)gcc 为
CC =$(CROSSCOM_PILE)gcc -g
使成生的vmlinux中含有debug信息
2. 所有生成 .o 的 rule 中再加一条 /*其他参数除了-c外抄生成.o文件用的参数*/
CC -E -dD -C $< > /preprocessing/$(shell pwd)/$<
生成预处理文件从这个文件里面能很容易找到 c 源文件的宏定义
3. objdump -h vmlinux > vmlinux.txt
显示 linux 内核段信息,如段的开始虚拟地址,段的长度
4. objdump -S -l -z vmlinux > vmlinux.txt
反汇编 vmlinux 到vmlinux.txt, vmlinux.txt 含有汇编和 c 源文件的混合代码,看起来很方
便。而且能一步步看linux怎么一步步运行的。
5. objdump -S -l -z -j xxxx(section name) vmlinux > vmlinux.txt
反汇编 linux 内核段 xxxx 到文件 vmlinux.txt 中。
6. objdump -x vmlinux > x.txt
vmliux中所有段的头信息,其中包口vmlinux的入口地址等
7. objdump --debugging vmlinux > debugging.txt
很多有用的debug信息,如函数名,结构体定义等
我觉的用根据以上信息,ultraedit看很方便。尤其在vmlinux.txt中选中文件名,
用ultraedit右键的open能马上打开文件,很方便。

<think>嗯,用户想知道如何使用objdump进行反汇编操作。首先,我需要回忆一下objdump的基本用法。根据之前的引用资料,objdump是一个用于反汇编ELF文件的工具,可以将二进制文件转换为汇编代码。用户可能需要具体的命令示例和参数说明。 首先,我应该整理常用的参数,比如-d用于反汇编,-S混合源代码和汇编(需要编译时加-g),-l显示行号,-M指定汇编语法格式。然后,需要给出一个基本命令示例,比如objdump -d test > test.dmp,这样用户可以将输出保存到文件。 另外,用户可能需要知道如何查看带源代码的反汇编,这时候需要用-S参数,并且编译时要加上调试信息,比如gcc -g。比如引用[2]提到objdump -S可以查看汇编和源代码的结合,这点很重要。 还要注意不同架构的二进制文件可能需要指定-M参数,比如Intel和AT&T语法,引用[4]可能提到相关内容。此外,查看动态符号表可以用-t参数,或者用--dynamic-objdump来反汇编动态链接的可执行文件,这也是用户可能需要的进阶用法。 用户的问题可能还涉及如何分析反汇编结果,比如查找特定函数或地址,这时候可以结合grep命令。例如引用[3]提到符号表的信息,所以用objdump -t查看符号表可能会有帮助。 总结下来,回答需要分步骤,首先介绍基本命令,然后详细说明参数,给出示例,并提醒编译选项的影响。同时,引用相关的资料来支持说明,比如引用[1]、[2]、[4]中的具体命令。最后,生成相关问题,帮助用户进一步学习。</think>### 如何使用objdump进行反汇编操作? #### 1. **基本反汇编命令** 使用`objdump -d`参数对可执行文件或目标文件进行反汇编,生成汇编代码: ```bash objdump -d 文件名 > 输出文件.dmp ``` 例如: ```bash objdump -d test > test.dmp ``` 此命令会将`test`可执行文件的汇编代码保存到`test.dmp`文件中[^1][^4]。 --- #### 2. **混合显示源代码与汇编代码(需调试信息)** 若编译时添加了`-g`调试选项(如`gcc -g test.c -o test`),可通过`-S`参数将源代码与汇编代码混合显示: ```bash objdump -S 文件名 ``` 例如: ```bash objdump -S test ``` 这有助于分析代码逻辑与汇编指令的对应关系[^2][^3]。 --- #### 3. **指定反汇编的语法格式** 默认使用AT&T汇编语法,若需切换为Intel语法,使用`-M`参数: ```bash objdump -d -M intel 文件名 ``` --- #### 4. **查看符号表和段信息** - **查看符号表**(函数和全局变量地址): ```bash objdump -t 文件名 ``` - **查看段信息**(如.text、.data等): ```bash objdump -x 文件名 ``` --- #### 5. **反汇编动态链接的可执行文件** 对于动态链接的可执行文件,使用`--dynamic-objdump`参数: ```bash objdump -d --dynamic-objdump 文件名 ``` --- #### 6. **反汇编特定函数** 结合`grep`过滤特定函数(如`main`): ```bash objdump -d 文件名 | grep -A20 "<main>:" ``` --- ### 示例完整命令 ```bash # 生成带调试信息的可执行文件 gcc -g test.c -o test # 反汇编并保存到文件 objdump -l -x -d test > test.dmp ``` --- ### 注意事项 - **依赖调试信息**:`-S`参数需编译时添加`-g`才能显示源代码。 - **跨架构处理**:若目标文件非当前平台架构,需使用交叉编译工具链的`objdump`。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值