下面按常见使用场景给你讲几种用 GDB 反汇编 Linux 程序的方法,从最简单到进阶。
gcc -g -O0 test.c -o test
-g:包含调试符号-O0:不优化,反汇编更易读gdb ./test
disassemble main
或简写:
disas main
输出示例:
Dump of assembler code for function main:
0x0000000000401136 <+0>: push %rbp
0x0000000000401137 <+1>: mov %rsp,%rbp
...
break main
run
disassemble
disassemble /m main
或:
layout split
退出:
Ctrl + X, then A
disassemble 0x401136, 0x401160
或:
disas 0x401136 0x401160
start
stepi # 单条汇编指令
配合:
info registers
x/10i $pc
x/10i 0x401136
查看内存:
x/20xw 0x401136
set disassembly-flavor intel
disassemble
(默认是 AT&T,可改成 Intel)
如果是 strip 过的二进制:
gdb ./a.out
info functions
或:
disassemble 0x400000
更推荐配合:
objdump -d ./a.out
| 目的 | 命令 |
|---|---|
| 反汇编函数 | disas main |
| 带源码 | disas /m main |
| 当前位置 | disas |
| 地址范围 | disas 0x.. 0x.. |
| 单步汇编 | stepi |
| 看寄存器 | info reg |
| Intel 风格 | set disassembly-flavor intel |
如果你愿意,可以告诉我:
我可以直接给你针对场景的 GDB 反汇编流程。