温馨提示×

objdump怎样反汇编linux程序

小樊
50
2026-10-20 23:34:57
栏目: 智能运维

在 Linux 下,objdump 是 GNU binutils 提供的工具,常用于反汇编可执行文件、目标文件或共享库。下面按常见使用场景说明。


一、基本反汇编命令

1. 反汇编整个可执行文件

objdump -d ./a.out
  • -d:反汇编所有包含指令的段(如 .text)
  • 输出为 AT&T 语法(默认)

2. 使用 Intel 语法(更直观)

objdump -d -M intel ./a.out

3. 反汇编指定函数

objdump -d -M intel ./a.out | grep -A 30 "<main>:"

或先查符号:

nm ./a.out | grep main

二、反汇编目标文件(.o)

objdump -d -M intel test.o

三、反汇编共享库(.so)

objdump -d -M intel libxxx.so

四、显示更多信息(推荐调试用)

1. 源码 + 汇编(需编译时加 -g)

objdump -d -S -M intel ./a.out
  • -S:交织显示源代码和汇编

2. 显示符号表

objdump -t ./a.out

3. 显示所有段信息

objdump -h ./a.out

五、反汇编特定段

objdump -d -M intel --section=.text ./a.out

六、结合调试信息定位函数

查看函数地址

nm ./a.out | grep main

按地址反汇编

objdump -d -M intel ./a.out | sed -n '/<main>:/,/^$/p'

七、常见示例完整流程

# 编译
gcc -g -O0 -o test test.c

# 反汇编
objdump -d -S -M intel test

八、注意事项

  • Strip 过的程序:符号名丢失,只能看到地址
  • 动态链接:系统库函数可能不会完整反汇编
  • 更强大的工具:
    • gdb(动态调试)
    • radare2 / ghidra(逆向分析)

如果你有具体程序类型(C/C++/Go/Strip 过)或想分析某段代码,可以发出来,我可以给你更针对性的命令。

0 踩