温馨提示×

gdb如何反汇编linux程序

小樊
44
2026-10-24 00:39:01
栏目: 智能运维

在 Linux 下使用 GDB(GNU Debugger) 反汇编程序,通常有几种常见方式。下面按使用场景给你一个实用指南。


一、准备工作

1. 编译程序(建议带调试信息)

gcc -g -O0 -o test test.c
  • -g:生成调试信息
  • -O0:关闭优化,反汇编更易读

2. 启动 GDB

gdb ./test

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

1. disassemble(最常用)

(gdb) disassemble

反汇编当前函数

指定函数或地址:

(gdb) disassemble main
(gdb) disassemble 0x401126

指定范围:

(gdb) disassemble 0x401100, 0x401200

2. disassemble /m(混合源码)

(gdb) disassemble /m main
  • 显示 C 源码 + 汇编
  • 非常适合学习或调试

3. disassemble /r(显示机器码)

(gdb) disassemble /r main

输出示例:

0x401126 <main+10>: 55        push   %rbp

4. 反汇编当前执行的指令

程序停住时:

(gdb) disassemble $pc

或:

(gdb) x/10i $pc
  • x/10i:从 $pc 开始反汇编 10 条指令

三、设置汇编语法(AT&T / Intel)

默认是 AT&T 语法(Linux)

(gdb) set disassembly-flavor intel
(gdb) disassemble main

查看当前设置:

(gdb) show disassembly-flavor

✅ 建议:

  • 初学者用 Intel
  • 内核/系统编程常用 AT&T

四、结合断点反汇编

(gdb) break main
(gdb) run
(gdb) disassemble

或单步执行汇编:

(gdb) stepi       # 单步一条汇编
(gdb) nexti       # 跳过函数调用

五、查看寄存器 & 内存(配合反汇编)

(gdb) info registers
(gdb) x/10xw $rsp

六、不用运行程序也能反汇编(静态)

如果只是想看反汇编,不调试:

objdump -d test

或带源码:

objdump -d -S test

七、典型组合示例

(gdb) set disassembly-flavor intel
(gdb) break main
(gdb) run
(gdb) disassemble /m main
(gdb) stepi

如果你愿意,可以告诉我:

  • 你是 调试 C / C++ / 汇编 / 漏洞分析
  • 还是 逆向 / CTF / 内核

我可以给你更针对性的 GDB 反汇编技巧。

0 踩