温馨提示×

怎么反汇编带调试信息文件

小樊
42
2026-08-30 10:36:07
栏目: 编程语言

要反汇编带调试信息的文件,一般有两种常见场景:反汇编 ELF / PE 可执行文件目标文件(.o),并且文件里通常含有 DWARF / PDB 等调试信息。下面按常用工具分别说明。


一、使用 objdump(Linux / ELF 常用)

1️⃣ 反汇编整个文件

objdump -d test

2️⃣ 使用调试信息(源码+汇编对照)

objdump -S test

-S 会把源码和汇编交错显示,前提是编译时加了 -g

示例编译:

gcc -g -O0 test.c -o test

输出类似:

main():
    int a = 1;
  400526:   c7 45 fc 01 00 00 00    movl   $0x1,-0x4(%rbp)

3️⃣ 只反汇编某个函数

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

二、使用 gdb(推荐,调试信息最完整)

1️⃣ 启动 gdb

gdb ./test

2️⃣ 反汇编当前函数

disassemble

3️⃣ 反汇编指定函数

disassemble main

4️⃣ 显示源码 + 汇编

layout split

5️⃣ 显示机器码

disassemble /r main

优点

  • 能识别变量、行号、函数名
  • 支持 DWARF 调试信息
  • 适合逆向 + 调试

三、使用 llvm-objdump(LLVM 工具链)

llvm-objdump -S test

或:

llvm-objdump -d test

适合 clang 编译的程序。


四、Windows(带 PDB 调试信息)

1️⃣ x64dbg / WinDbg

  • 加载 exe
  • 自动加载 PDB
  • 可查看符号名、源码行号

2️⃣ dumpbin

dumpbin /DISASM test.exe

五、查看是否包含调试信息

ELF 文件

file test

输出包含:

with debug_info

或:

readelf -S test | grep debug

Windows

dumpbin /PDBALTPATH test.exe

六、常见编译选项提醒

✅ 推荐编译方式:

gcc -g -O0 test.c -o test

❌ 不推荐:

gcc -O2 -s test.c -o test

总结推荐

目的 推荐工具
快速反汇编 objdump -d
源码+汇编对照 objdump -S
调试/变量分析 gdb
LLVM 项目 llvm-objdump
Windows WinDbg / x64dbg

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

  • 操作系统(Linux / Windows)
  • 文件格式(ELF / PE)
  • 目标:逆向 / 漏洞分析 / 学习汇编

我可以给你更精确的一步步操作示例

0