调试 Linux 下的反汇编代码,通常围绕 程序执行流程、指令级调试、内存/寄存器观察 进行。下面按“工具 → 流程 → 实战技巧”系统说明。
| 工具 | 用途 |
|---|---|
objdump |
静态反汇编 |
readelf |
ELF 文件结构分析 |
nm |
符号表查看 |
strings |
提取字符串 |
file |
判断文件类型 |
| 工具 | 特点 |
|---|---|
gdb |
最常用,支持源码/汇编级调试 |
gdb + peda / pwndbg / gef |
增强反汇编、内存、漏洞分析 |
lldb |
LLVM 系,替代 gdb |
strace |
系统调用跟踪 |
ltrace |
库函数调用跟踪 |
| 工具 | 用途 |
|---|---|
radare2 (r2) |
强大的逆向分析框架 |
IDA Pro |
商业逆向(支持 Linux) |
Ghidra |
NSA 开源逆向工具 |
angr |
符号执行 |
objdump -d ./a.out
只反汇编某个函数:
objdump -d ./a.out | grep -A 30 "<main>:"
nm ./a.out
readelf -s ./a.out
readelf -h ./a.out
(找 Entry point address)
gdb ./a.out
进入后:
set disassembly-flavor intel # 推荐 Intel 语法
disassemble main
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
gdb ./a.out
(gdb) set disassembly-flavor intel
(gdb) b main
(gdb) run
(gdb) disassemble
(gdb) si
(gdb) info registers
git clone https://github.com/pwndbg/pwndbg
cd pwndbg
./setup.sh
特性:
启动后效果:
► 0x401125 <main+12> mov eax, 0
strace ./a.out
ltrace ./a.out
r2 ./a.out
常用命令:
aaa # 自动分析
pdf @ main # 反汇编 main
s main # 跳转
pd 20 # 显示 20 条指令
nm ./a.out # 无符号
解决:
objdump -dradare2entry pointobjdump -d ./a.out | grep -E "<main>|<_start>"
或从 _start 单步跟。
参数:rdi, rsi, rdx, rcx, r8, r9
返回值:rax
栈对齐:16 字节
file ./a.out
strings ./a.out
objdump -d ./a.out > asm.txt
gdb ./a.out
b _start
run
si
✅ 推荐顺序:
objdump + gdbpwndbgradare2 / IDA✅ 必学汇编指令:
mov, push, pop, call, ret
jmp, je, jne
syscall
如果你愿意,我可以:
只要告诉我你的具体目标即可。