温馨提示×

如何调试Linux反汇编

小樊
39
2026-08-05 05:24:54
栏目: 智能运维

调试 Linux 下的反汇编代码,通常围绕 程序执行流程、指令级调试、内存/寄存器观察 进行。下面按“工具 → 流程 → 实战技巧”系统说明。


一、常用工具选型

1️⃣ 基础工具

工具 用途
objdump 静态反汇编
readelf ELF 文件结构分析
nm 符号表查看
strings 提取字符串
file 判断文件类型

2️⃣ 动态调试工具(核心)

工具 特点
gdb 最常用,支持源码/汇编级调试
gdb + peda / pwndbg / gef 增强反汇编、内存、漏洞分析
lldb LLVM 系,替代 gdb
strace 系统调用跟踪
ltrace 库函数调用跟踪

3️⃣ 高级 / 逆向工具

工具 用途
radare2 (r2) 强大的逆向分析框架
IDA Pro 商业逆向(支持 Linux)
Ghidra NSA 开源逆向工具
angr 符号执行

二、静态反汇编(先分析)

1️⃣ 查看汇编代码

objdump -d ./a.out

只反汇编某个函数:

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

2️⃣ 查看符号表

nm ./a.out
readelf -s ./a.out

3️⃣ 查看入口点

readelf -h ./a.out

(找 Entry point address


三、使用 GDB 调试反汇编(重点)

1️⃣ 以汇编模式启动

gdb ./a.out

进入后:

set disassembly-flavor intel   # 推荐 Intel 语法
disassemble main

2️⃣ 常用 GDB 汇编调试命令

✅ 查看汇编

disassemble
disassemble main
disassemble 0x401000

✅ 单步执行(汇编级)

si        # step instruction
ni        # next instruction

✅ 查看寄存器

info registers
info registers rax

✅ 查看内存

x/10xw 0x7fffffffe000
x/20i $rip

✅ 设置断点

b main
b *0x401125

3️⃣ 实战调试流程(典型)

gdb ./a.out
(gdb) set disassembly-flavor intel
(gdb) b main
(gdb) run
(gdb) disassemble
(gdb) si
(gdb) info registers

四、增强 GDB(强烈推荐)

安装 pwndbg(最流行)

git clone https://github.com/pwndbg/pwndbg
cd pwndbg
./setup.sh

特性:

  • 自动显示汇编
  • 实时寄存器
  • 栈/堆可视化
  • 漏洞分析辅助

启动后效果:

► 0x401125 <main+12>    mov    eax, 0

五、系统调用级调试

1️⃣ 跟踪系统调用

strace ./a.out

2️⃣ 跟踪库函数

ltrace ./a.out

六、Radare2 快速入门(逆向常用)

r2 ./a.out

常用命令:

aaa          # 自动分析
pdf @ main   # 反汇编 main
s main       # 跳转
pd 20        # 显示 20 条指令

七、调试技巧(非常重要)

✅ 1. 符号被 strip 了怎么办?

nm ./a.out   # 无符号

解决:

  • objdump -d
  • radare2
  • entry point

✅ 2. 如何定位 main?

objdump -d ./a.out | grep -E "<main>|<_start>"

或从 _start 单步跟。


✅ 3. 理解调用约定(x86-64)

参数:rdi, rsi, rdx, rcx, r8, r9
返回值:rax
栈对齐:16 字节

八、典型调试场景示例

场景:分析一个未知 ELF

file ./a.out
strings ./a.out
objdump -d ./a.out > asm.txt
gdb ./a.out
b _start
run
si

九、学习建议

✅ 推荐顺序:

  1. 会用 objdump + gdb
  2. 熟悉 x86-64 汇编
  3. 使用 pwndbg
  4. 学习 radare2 / IDA

✅ 必学汇编指令:

mov, push, pop, call, ret
jmp, je, jne
syscall

如果你愿意,我可以:

  • ✅ 手把手带你 调试一个真实 ELF
  • ✅ 讲解 某一段反汇编代码
  • ✅ 针对 CTF / 内核 / 漏洞利用 场景讲解

只要告诉我你的具体目标即可。

0