温馨提示×

linux反汇编gdb如何用

小樊
46
2026-10-26 22:41:14
栏目: 智能运维

在 Linux 下使用 GDB(GNU Debugger) 进行反汇编(disassembly)调试,是分析程序执行流程、定位崩溃点、理解底层实现的常用手段。下面从基本使用 → 反汇编命令 → 实战示例逐步说明。


一、准备环境

1. 编译带调试信息的程序

gcc -g -O0 test.c -o test
  • -g:生成调试信息
  • -O0:关闭优化(反汇编更直观)

2. 启动 GDB

gdb ./test

二、GDB 中常用的反汇编命令

1. 查看函数反汇编

disassemble main

或简写:

disas main

2. 查看当前执行位置的反汇编

disassemble

3. 带源码的反汇编(推荐)

disassemble /m main
  • /m:混合显示 C 源码 + 汇编

4. 查看某地址范围的反汇编

disassemble 0x4005b6, 0x400600

5. 显示当前函数的汇编(运行时)

disas

三、Intel 语法(更像 Windows 风格)

默认是 AT&T 语法(晦涩),建议切换:

set disassembly-flavor intel

可写入 ~/.gdbinit 永久生效:

echo "set disassembly-flavor intel" >> ~/.gdbinit

四、配合断点调试反汇编

1. 下断点

break main
run

2. 单步执行(汇编级)

stepi      # 单步一条指令
nexti      # 类似 stepi,但不进入函数

3. 查看寄存器

info registers

或简写:

i r

4. 查看某寄存器

info registers rax

5. 查看内存

x/10i $rip     # 从当前指令开始反汇编 10 条
x/16x $rsp     # 查看栈内存

五、完整实战示例

C 程序

int add(int a, int b) {
    return a + b;
}

int main() {
    int x = add(3, 4);
    return 0;
}

GDB 操作

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 反汇编用法。

0 踩