温馨提示×

怎么用objdump反汇编

小樊
35
2026-08-04 08:14:51
栏目: 编程语言

objdump 是 GNU Binutils 里非常常用的反汇编工具,下面按常见用法 → 常用选项 → 实战示例来说明。


一、基本用法

objdump -d <二进制文件>

这是最常用的一条命令,用来反汇编可执行代码段


二、常用选项说明

-d(最常用)

objdump -d a.out
  • 反汇编 可执行代码段
  • 只反汇编被标记为代码的部分

-D(更激进)

objdump -D a.out
  • 反汇编所有段
  • 包括数据段(可能看到无意义指令)
  • 常用于裸二进制文件或固件

-S(源码 + 汇编,强烈推荐)

objdump -S a.out
  • 汇编 + 原始源码对照
  • 需要编译时加 -g
gcc -g -o a.out main.c

-M(控制汇编语法)

objdump -d -M intel a.out
  • 使用 Intel 语法(默认是 AT&T)
  • 常见选项:
    • intel
    • att
    • x86-64

-b(指定文件格式)

objdump -b binary -m i386 -D file.bin
  • 用于裸二进制文件
  • -m 指定架构

-t(查看符号表)

objdump -t a.out
  • 查看函数名、变量名、地址

-h(查看段信息)

objdump -h a.out
  • 查看 .text.data.bss 等段

三、常见实战示例

1️⃣ 反汇编一个 ELF 可执行文件

objdump -d a.out

2️⃣ 源码 + 汇编对照

gcc -g -o test test.c
objdump -S test

3️⃣ 使用 Intel 汇编语法

objdump -d -M intel a.out

4️⃣ 反汇编某个函数

objdump -d a.out | grep -A 20 main

或者更精确:

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

5️⃣ 反汇编裸二进制文件

objdump -b binary -m i386 -D firmware.bin

6️⃣ 查看函数地址

objdump -t a.out | grep main

四、常见文件类型支持

objdump 支持:

  • ELF(Linux)
  • PE(Windows,有限)
  • Mach-O(macOS,部分)
  • 裸 binary

五、简单对比:objdump vs gdb vs IDA

工具 用途
objdump 静态反汇编
gdb 动态调试
IDA / Ghidra 高级逆向

六、常见问题

❓ 看不到函数名?

  • 编译时没加 -g
  • 被 strip 过:
file a.out
strip a.out

❓ 指令看起来很怪?

  • 可能是 AT&T 语法
  • 换 Intel:
-M intel

如果你愿意,可以告诉我:

  • Linux / Windows / 嵌入式
  • x86 / ARM / MIPS
  • ELF / PE / bin

我可以给你更精确的 objdump 命令组合

0