温馨提示×

objdump如何反汇编linux程序

小樊
42
2026-09-03 09:09:54
栏目: 智能运维

在 Linux 下,objdump 是 GNU Binutils 提供的工具,常用于反汇编可执行文件、目标文件或库文件。下面按常见用法逐步说明。


一、基本反汇编命令

1. 反汇编整个程序

objdump -d program
  • -d:反汇编所有包含指令的段(如 .text
  • program:ELF 可执行文件或 .o 文件

示例:

objdump -d ./a.out

2. 反汇编指定段

objdump -d -j .text program

只反汇编 .text 段(代码段)。


二、常用增强选项

1. 显示源代码(如果有调试信息)

objdump -d -S program
  • -S:交错显示源代码 + 汇编
  • 需要编译时加 -g
gcc -g -o program program.c

2. 显示符号表

objdump -t program

objdump -T program   # 动态符号

3. 显示文件头信息(ELF 头)

objdump -f program

4. 显示所有段信息

objdump -h program

5. 反汇编 + 显示地址和机器码

objdump -d -r program
  • -r:显示重定位信息(对 .o 文件很有用)

三、针对架构的反汇编

1. x86 / x86_64

objdump -d program

(自动识别架构)

2. ARM

objdump -d -m arm program

3. MIPS

objdump -d -m mips program

四、配合其他工具的典型流程

1. 查看是否 stripped

file program
  • stripped:无符号信息,反汇编只能看到地址

2. 结合 nm / readelf

nm program
readelf -h program

五、常见问题

Q1:为什么看不到函数名?

  • 程序被 strip
  • 解决:使用未 strip 的版本或调试版本

Q2:能不能反汇编动态库?

可以:

objdump -d libc.so

Q3:和 gdb 的区别?

  • objdump:静态分析
  • gdb:运行时调试、动态反汇编

六、示例完整命令

objdump -d -S -M intel ./a.out
  • -M intel:使用 Intel 语法(默认是 AT&T)

如果你有具体程序类型(如内核模块、strip 后的二进制、ARM 固件),我可以给你更针对性的反汇编命令。

0