在 Linux 下使用 GDB(GNU Debugger) 反汇编程序,主要有以下几种常用方式。下面从准备工作 → 基本反汇编 → 常用技巧逐步说明。
gcc -g -O0 -o test test.c
-g:包含调试符号-O0:关闭优化,反汇编更易读即使是 strip 过的程序也能反汇编,但可读性会差很多。
gdb ./test
disassemble(最常用)反汇编函数或地址范围。
disassemble main
disassemble
disassemble 0x4005b6, 0x400600
默认是 AT&T 语法,建议切换:
set disassembly-flavor intel
查看当前设置:
show disassembly-flavor
layout / disassemble -s)disassemble /m main
或
disassemble /s main
layout asm
或
layout split
(上源码,下汇编)
退出 TUI:
Ctrl + X, Ctrl + A
break main
run
disassemble
stepi # 单步一条指令
nexti # 类似 stepi,不进入函数
x/10i $pc
($pc 是当前指令指针)
x/16xb 0x4005b6
disassemble 0x400000, 0x401000
更推荐使用:
objdump -d ./testobjdump -d -M intel ./testgdb ./test
(gdb) set disassembly-flavor intel
(gdb) break main
(gdb) run
(gdb) layout split
(gdb) stepi
objdumpIDA ProGhidra如果你有具体场景(比如:
可以告诉我,我可以给你更针对性的 GDB 反汇编方法。