在 CentOS 上用 GDB 反汇编程序,通常按下面步骤操作即可。我会从最常用的方法到进阶用法逐步说明。
sudo yum install -y gdb binutils
如果需要调试符号(推荐):
sudo yum install -y debuginfo-install
gdb ./your_program
如果是带参数的程序:
gdb --args ./your_program arg1 arg2
set disassembly-flavor intel
默认是 AT&T 语法,Intel 语法更直观。
查看当前设置:
show disassembly-flavor
disassemble main
或:
disas main
输出示例:
Dump of assembler code for function main:
0x0000000000401136 <+0>: push rbp
0x0000000000401137 <+1>: mov rbp,rsp
...
End of assembler dump.
disassemble 0x401136,0x401160
disassemble
break main
run
stepi
或
si
disassemble
layout asm
或同时显示源码和汇编:
layout split
退出 layout:
Ctrl + X, Ctrl + A
info registers
或简写:
info reg
p $rax
x/10xw 0x401136
含义:
x → 查看内存
10 → 10 个单位
x → 十六进制
w → 4 字节(word)
info functions
info address main
虽然不是 GDB,但 CentOS 上常用:
objdump -d ./your_program
Intel 语法:
objdump -M intel -d ./your_program
debuginfo-install glibc
file ./your_program
如果显示 stripped,反汇编仍然可以,但函数名会丢失。
| 功能 | 命令 |
|---|---|
| 反汇编函数 | disas main |
| Intel 语法 | set disassembly-flavor intel |
| 单步汇编 | si |
| 当前汇编 | disas |
| 查看寄存器 | info reg |
| 查看内存 | x/10xw addr |
如果你愿意,可以告诉我:
我可以给你更针对性的 GDB 反汇编示例。