温馨提示×

如何用gdb反汇编centos指令

小樊
37
2026-10-23 17:41:26
栏目: 智能运维

在 CentOS(或其他 Linux 发行版)上使用 GDB(GNU Debugger)反汇编指令,通常有几种常见方式。下面按使用场景给你一个实用指南。


一、准备工作

1. 安装 GDB(CentOS)

sudo yum install -y gdb

如果是 CentOS 8 / Stream:

sudo dnf install -y gdb

2. 编译程序(必须带调试信息)

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

二、进入 GDB 并反汇编

1. 启动 GDB

gdb ./test

三、常用反汇编命令

✅ 1. 反汇编当前函数(最常用)

disassemble

或

disas

✅ 2. 反汇编指定函数

disassemble main

✅ 3. 反汇编指定地址范围

disassemble 0x400520, 0x400560

✅ 4. 反汇编当前 PC(程序计数器)

disassemble $pc

✅ 5. 反汇编 + 源码(推荐)

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

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

CentOS 默认是 AT&T 语法(可读性较差)

切换为 Intel 语法(推荐)

set disassembly-flavor intel

查看当前设置:

show disassembly-flavor

示例:

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

五、单步执行汇编指令

1. 下断点

break main
run

2. 单步执行一条汇编指令

stepi

或

si

3. 继续执行一条指令(不进入函数)

nexti

或

ni

六、查看寄存器

info registers

或简写:

info reg

查看特定寄存器:

print $rax

七、结合内存查看

x/10i $pc
  • x:查看内存
  • 10:10 条
  • i:instruction(汇编)

示例:

x/5i $rip

八、完整示例

gdb ./test
(gdb) set disassembly-flavor intel
(gdb) break main
(gdb) run
(gdb) disassemble /m main
(gdb) si
(gdb) info reg

九、常见问题

❓ 看不到汇编?

  • 没加 -g
  • 被优化掉(-O2)
  • 程序已退出

❓ CentOS 7 默认 GDB 较老?

可手动编译新版 GDB,或使用 gdbserver


如果你有 具体程序 / 架构(x86 / x64 / ARM) / 想分析哪段代码,我可以给你更针对性的反汇编示例。

0 踩