温馨提示×

objdump怎么反汇编

小樊
40
2026-08-20 06:51:25
栏目: 编程语言

objdump 是 GNU Binutils 中的经典反汇编工具,常用于分析 ELF、PE、Mach-O 等格式的可执行文件或目标文件。下面按常见用法 → 常用选项 → 实战示例来说明。


一、基本语法

objdump [选项] 文件

二、常用反汇编选项

1️⃣ 反汇编整个代码段(最常用)

objdump -d test
  • -d:反汇编 可执行代码段
  • 会显示:
    • 地址
    • 机器码
    • 汇编指令

示例输出:

080484b0 <main>:
 80484b0:   55                      push   %ebp
 80484b1:   89 e5                   mov    %esp,%ebp

2️⃣ 反汇编所有段(包括数据段)

objdump -D test

⚠️ 注意:

  • -D 会把 数据也当指令反汇编
  • 常用于 shellcode / 裸二进制分析

3️⃣ 显示源码 + 汇编(需要 -g 编译)

objdump -S test

前提:

gcc -g -o test test.c

输出示例:

int main() {
 80484b0:   55          push   %ebp

4️⃣ 反汇编指定架构(交叉分析)

objdump -b elf32-i386 -d test

或 ARM:

objdump -b elf32-littlearm -d test

5️⃣ 显示符号表

objdump -t test

或动态符号:

objdump -T test

6️⃣ 显示段信息

objdump -h test

常见段:

  • .text:代码
  • .data:已初始化数据
  • .bss:未初始化数据

7️⃣ 显示重定位信息

objdump -r test

常用于分析链接过程。


三、实战示例

✅ 示例 1:反汇编一个 ELF 程序

gcc -m32 -o test test.c
objdump -d test

✅ 示例 2:分析函数 main

objdump -d test | grep -A 20 "<main>:"

✅ 示例 3:裸二进制文件反汇编

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

✅ 示例 4:结合调试信息

objdump -S -d test

四、objdump vs 其他工具

工具 特点
objdump 稳定、标准、适合快速查看
gdb 动态调试
radare2 / r2 逆向分析神器
IDA / Ghidra 高级反编译
capstone 可编程反汇编

五、常见坑

❌ 没有反汇编内容
✅ 可能是 stripped 文件
✅ 用 -D 或检查 .text 段是否存在

❌ 架构不对
✅ 用 -m 指定架构


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

  • 分析的是 ELF / PE / Mach-O
  • x86 / ARM / MIPS
  • 静态分析还是配合 gdb

我可以给你更精确的命令。

0