在 Linux 下使用 GDB(GNU Debugger)进行反汇编,通常是对一个可执行文件或正在运行的进程进行指令级分析。下面从基础用法 → 常见场景 → 高级技巧逐步说明。
最好带调试信息(不是必须,但更方便):
gcc -g -o test test.c
如果是别人给的二进制(无源码):
file test
# 确认是 ELF 可执行文件
gdb ./test
或调试正在运行的进程:
gdb -p <pid>
disassemble main
disassemble
disassemble 0x4005b6, 0x400600
disassemble $pc, +20
break main
run
disassemble
stepi # 单条指令执行
disassemble
或:
ni # 单步(不进入函数)
layout split
或旧版本:
layout asm
退出视图:
Ctrl + X, then A
Linux 默认是 AT&T 语法,很多人习惯 Intel:
set disassembly-flavor intel
查看当前设置:
show disassembly-flavor
示例输出:
mov eax, [rbp-4]
info registers
或:
info reg rip rsp rbp
x/10i $pc # 反汇编 10 条指令
x/20xw $rsp # 以 4 字节十六进制查看栈
gdb ./a.out
(gdb) info functions
(gdb) disassemble 0x400000
或直接:
start
disassemble $pc
set disassembly-flavor intel
break main
run
disassemble
stepi
x/5i $pc
bt
frame 1
disassemble
GDB 适合动态调试 + 反汇编
objdump -d -M intel test
适合静态分析
gcc -g 写小程序gdb ./a.outset disassembly-flavor intelbreak main → run → disassemblestepi + info reg如果你愿意,我可以:
你现在是用于 学习汇编 / 调试 / 逆向 / CTF 哪一种?