在 Linux 下使用 GDB(GNU Debugger) 进行反汇编(disassembly)调试,是分析程序执行流程、定位崩溃点、理解底层实现的常用手段。下面从基本使用 → 反汇编命令 → 实战示例逐步说明。
gcc -g -O0 test.c -o test
-g:生成调试信息-O0:关闭优化(反汇编更直观)gdb ./test
disassemble main
或简写:
disas main
disassemble
disassemble /m main
/m:混合显示 C 源码 + 汇编disassemble 0x4005b6, 0x400600
disas
默认是 AT&T 语法(晦涩),建议切换:
set disassembly-flavor intel
可写入 ~/.gdbinit 永久生效:
echo "set disassembly-flavor intel" >> ~/.gdbinit
break main
run
stepi # 单步一条指令
nexti # 类似 stepi,但不进入函数
info registers
或简写:
i r
info registers rax
x/10i $rip # 从当前指令开始反汇编 10 条
x/16x $rsp # 查看栈内存
int add(int a, int b) {
return a + b;
}
int main() {
int x = add(3, 4);
return 0;
}
gdb ./test
(gdb) set disassembly-flavor intel
(gdb) break main
(gdb) run
(gdb) disas /m main
(gdb) stepi
(gdb) i r
| 功能 | 命令 |
|---|---|
| 反汇编函数 | disas main |
| 源码+汇编 | disas /m main |
| 汇编单步 | stepi |
| 查看寄存器 | info registers |
| 查看内存 | x/10i $rip |
| Intel 语法 | set disassembly-flavor intel |
objdump -d test:不进 GDB 直接反汇编gdb-peda / pwndbg:增强型 GDB(CTF/安全常用)layout asm:TUI 汇编界面如果你有具体场景(如:崩溃分析、Shellcode、CTF、内核、动态库),我可以给你更针对性的 GDB 反汇编用法。