温馨提示×

怎样用gdb反汇编linux

小樊
45
2026-09-06 13:32:53
栏目: 智能运维

下面按常见使用场景给你讲几种用 GDB 反汇编 Linux 程序的方法,从最简单到进阶。


一、前提准备

1. 编译带调试信息(推荐)

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

2. 启动 GDB

gdb ./test

二、最常用:反汇编函数

1. 反汇编某个函数

disassemble main

或简写:

disas main

输出示例:

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

三、反汇编当前执行位置

1. 先运行到某处

break main
run

2. 反汇编当前 PC

disassemble

四、带源码的反汇编(强烈推荐)

disassemble /m main

或:

layout split
  • 上半:源码
  • 下半:汇编
  • 实时跟随执行

退出:

Ctrl + X, then A

五、反汇编指定地址范围

disassemble 0x401136, 0x401160

或:

disas 0x401136 0x401160

六、单步看汇编(不看 C)

start
stepi        # 单条汇编指令

配合:

info registers
x/10i $pc

七、查看某地址的汇编

x/10i 0x401136

查看内存:

x/20xw 0x401136

八、反汇编整个程序(不常用)

set disassembly-flavor intel
disassemble

(默认是 AT&T,可改成 Intel)


九、结合 Linux 内核 / 无符号程序

如果是 strip 过的二进制

gdb ./a.out
info functions

或:

disassemble 0x400000

更推荐配合:

objdump -d ./a.out

十、常见技巧总结

目的 命令
反汇编函数 disas main
带源码 disas /m main
当前位置 disas
地址范围 disas 0x.. 0x..
单步汇编 stepi
看寄存器 info reg
Intel 风格 set disassembly-flavor intel

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

  • 用户态程序 还是 内核 / 驱动
  • 是否 无符号 / stripped
  • 想分析 漏洞 / 逆向 / 调试崩溃

我可以直接给你针对场景的 GDB 反汇编流程。

0