温馨提示×

GDB如何反汇编CentOS程序

小樊
48
2026-08-30 10:24:05
栏目: 智能运维

在 CentOS 上用 GDB 反汇编程序,通常按下面步骤操作即可。我会从最常用的方法进阶用法逐步说明。


一、准备环境(CentOS)

1. 安装必要工具

sudo yum install -y gdb binutils

如果需要调试符号(推荐):

sudo yum install -y debuginfo-install

二、用 GDB 反汇编程序(基础流程)

1. 启动 GDB

gdb ./your_program

如果是带参数的程序:

gdb --args ./your_program arg1 arg2

2. 设置反汇编风格(可选但推荐)

set disassembly-flavor intel

默认是 AT&T 语法,Intel 语法更直观。

查看当前设置:

show disassembly-flavor

3. 反汇编某个函数

disassemble main

或:

disas main

输出示例:

Dump of assembler code for function main:
   0x0000000000401136 <+0>:     push   rbp
   0x0000000000401137 <+1>:     mov    rbp,rsp
   ...
End of assembler dump.

4. 反汇编指定地址范围

disassemble 0x401136,0x401160

5. 反汇编当前执行位置

disassemble

三、结合调试流程反汇编(更常用)

1. 设置断点

break main

2. 运行程序

run

3. 单步执行(汇编级)

stepi

si

4. 查看当前汇编

disassemble

四、查看汇编 + 源码(如果有源码)

layout asm

或同时显示源码和汇编:

layout split

退出 layout

Ctrl + X, Ctrl + A

五、查看寄存器和内存

1. 查看寄存器

info registers

或简写:

info reg

2. 查看某寄存器

p $rax

3. 查看内存

x/10xw 0x401136

含义:

x  → 查看内存
10 → 10 个单位
x  → 十六进制
w  → 4 字节(word)

六、查看函数符号(辅助反汇编)

1. 查看所有函数

info functions

2. 查看某个函数地址

info address main

七、仅反汇编不运行(objdump 补充)

虽然不是 GDB,但 CentOS 上常用:

objdump -d ./your_program

Intel 语法:

objdump -M intel -d ./your_program

八、常见问题

1. 提示缺少调试符号

debuginfo-install glibc

2. 程序被 strip 过

file ./your_program

如果显示 stripped,反汇编仍然可以,但函数名会丢失。


九、常用 GDB 反汇编速查表

功能 命令
反汇编函数 disas main
Intel 语法 set disassembly-flavor intel
单步汇编 si
当前汇编 disas
查看寄存器 info reg
查看内存 x/10xw addr

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

  • 具体是 32 位还是 64 位程序
  • 是否 stripped
  • 你是要做逆向、漏洞分析还是调试 bug

我可以给你更针对性的 GDB 反汇编示例。

0