温馨提示×

如何用gdb反汇编linux程序

小樊
40
2026-09-12 08:36:32
栏目: 智能运维

在 Linux 下使用 GDB(GNU Debugger) 反汇编程序,主要有以下几种常用方式。下面从准备工作 → 基本反汇编 → 常用技巧逐步说明。


一、准备工作

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

gcc -g -O0 -o test test.c
  • -g:包含调试符号
  • -O0:关闭优化,反汇编更易读

即使是 strip 过的程序也能反汇编,但可读性会差很多。

2. 启动 GDB

gdb ./test

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

1. disassemble(最常用)

反汇编函数或地址范围。

反汇编整个函数

disassemble main

反汇编当前函数

disassemble

反汇编指定地址范围

disassemble 0x4005b6, 0x400600

2. Intel 语法(比 AT&T 更易读)

默认是 AT&T 语法,建议切换:

set disassembly-flavor intel

查看当前设置:

show disassembly-flavor

3. 反汇编 + 源码(layout / disassemble -s

带源码的反汇编

disassemble /m main

disassemble /s main

TUI 模式(图形化反汇编)

layout asm

layout split

(上源码,下汇编)

退出 TUI:

Ctrl + X, Ctrl + A

三、结合断点反汇编

1. 设置断点

break main
run

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

disassemble

3. 单步执行(汇编级)

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

四、查看内存中的机器码

1. 查看某地址的指令

x/10i $pc

$pc 是当前指令指针)

2. 查看原始字节

x/16xb 0x4005b6

五、反汇编整个程序(不推荐但可行)

disassemble 0x400000, 0x401000

更推荐使用:

  • objdump -d ./test
  • objdump -d -M intel ./test

六、常见组合示例

gdb ./test
(gdb) set disassembly-flavor intel
(gdb) break main
(gdb) run
(gdb) layout split
(gdb) stepi

七、补充说明

  • GDB 本身不是专业反汇编工具
    更适合调试 + 反汇编结合使用
  • 若只做静态分析,推荐:
    • objdump
    • IDA Pro
    • Ghidra

如果你有具体场景(比如:

  • 分析无符号程序
  • 反汇编某个系统调用
  • 配合 Core Dump
  • 分析漏洞 / shellcode)

可以告诉我,我可以给你更针对性的 GDB 反汇编方法。

0