温馨提示×

如何用gdb反汇编linux

小樊
35
2026-10-12 06:25:25
栏目: 智能运维

在 Linux 下使用 GDB(GNU Debugger)进行反汇编,通常是对一个可执行文件或正在运行的进程进行指令级分析。下面从基础用法 → 常见场景 → 高级技巧逐步说明。


一、基本前提

1. 准备程序

最好带调试信息(不是必须,但更方便):

gcc -g -o test test.c

如果是别人给的二进制(无源码):

file test
# 确认是 ELF 可执行文件

二、用 GDB 启动并反汇编

1. 启动 GDB

gdb ./test

或调试正在运行的进程:

gdb -p <pid>

2. 最常用反汇编命令

(1)反汇编整个函数

disassemble main

(2)反汇编当前函数

disassemble

(3)反汇编指定地址范围

disassemble 0x4005b6, 0x400600

(4)反汇编当前 PC 附近

disassemble $pc, +20

三、结合调试过程反汇编

1. 设置断点并反汇编

break main
run
disassemble

2. 单步执行并看汇编

stepi        # 单条指令执行
disassemble

或:

ni           # 单步(不进入函数)

四、显示源码 + 汇编(强烈推荐)

layout split

或旧版本:

layout asm

退出视图:

Ctrl + X, then A

五、反汇编模式设置(Intel / AT&T)

Linux 默认是 AT&T 语法,很多人习惯 Intel:

set disassembly-flavor intel

查看当前设置:

show disassembly-flavor

示例输出:

mov    eax, [rbp-4]

六、查看寄存器与内存

1. 查看寄存器

info registers

或:

info reg rip rsp rbp

2. 查看内存

x/10i $pc        # 反汇编 10 条指令
x/20xw $rsp      # 以 4 字节十六进制查看栈

七、无符号信息时的反汇编(裸二进制)

gdb ./a.out
(gdb) info functions
(gdb) disassemble 0x400000

或直接:

start
disassemble $pc

八、常见实用组合

反汇编 + 单步跟踪

set disassembly-flavor intel
break main
run
disassemble
stepi
x/5i $pc

查看某函数调用链

bt
frame 1
disassemble

九、与 objdump 的区别(补充)

GDB 适合动态调试 + 反汇编

objdump -d -M intel test

适合静态分析


十、典型学习路径建议

  1. gcc -g 写小程序
  2. gdb ./a.out
  3. set disassembly-flavor intel
  4. break main → run → disassemble
  5. stepi + info reg

如果你愿意,我可以:

  • 给你一个 C → 汇编对照示例
  • 演示 栈溢出 / 函数调用 的汇编过程
  • 或针对 CTF / 逆向 / 内核 场景讲 GDB 用法

你现在是用于 学习汇编 / 调试 / 逆向 / CTF 哪一种?

0 踩