温馨提示×

怎样反汇编linux内核

小樊
43
2026-10-06 09:25:41
栏目: 智能运维

反汇编 Linux 内核是一项高级调试 / 分析任务,常用于内核安全研究、漏洞分析、驱动调试和学习内核实现。下面按常见场景 + 工具 + 示例系统说明。


一、先明确:你想“反汇编”什么?

Linux 内核通常不是“一个文件”,而是:

  1. 未压缩内核(vmlinux) —— 带符号,可反汇编
  2. 压缩内核(bzImage / zImage) —— 启动用,需解压
  3. 内核模块(.ko) —— 单独反汇编
  4. 运行中内核 —— 用调试器查看

✅ 最推荐:vmlinux + objdump / gdb


二、反汇编整个内核(vmlinux)

1️⃣ 获取 vmlinux

编译内核后:

ls arch/x86/boot/vmlinux
# 或
ls vmlinux

如果是发行版内核:

sudo apt install linux-image-$(uname -r)-dbgsym

2️⃣ 使用 objdump 反汇编

反汇编整个内核

objdump -d vmlinux > kernel.asm

只反汇编某个函数

objdump -d vmlinux | grep -A 50 '<sys_open>:'

反汇编 + 源码(如果有调试信息)

objdump -S vmlinux > kernel_source.asm

三、反汇编内核模块(.ko)

objdump -d mydriver.ko

带源码:

objdump -S mydriver.ko

查看符号:

nm mydriver.ko

四、反汇编 bzImage / zImage

1️⃣ 提取未压缩内核

scripts/extract-vmlinux arch/x86/boot/bzImage > vmlinux

然后按 vmlinux 方式反汇编。


五、使用 GDB 反汇编(最专业)

1️⃣ 启动 GDB

gdb vmlinux

2️⃣ 反汇编函数

disassemble sys_open

3️⃣ 带源码

disassemble /m sys_open

4️⃣ 查看当前指令

x/10i $pc

六、运行时反汇编(QEMU + GDB)

1️⃣ 启动 QEMU

qemu-system-x86_64 -kernel bzImage -s -S

2️⃣ GDB 连接

gdb vmlinux
(gdb) target remote :1234
(gdb) disassemble start_kernel

七、常用辅助工具

工具 用途
objdump 静态反汇编
gdb 调试 / 动态反汇编
nm 查看符号
readelf ELF 结构分析
radare2 / ghidra 逆向分析
ftrace 内核函数跟踪

八、常见注意点

⚠️ 内核是 位置无关 / 特殊段,不要直接当普通程序跑
⚠️ 优化级别高,反汇编可读性差
⚠️ 符号可能被 strip(发行版常见)
⚠️ 内联汇编、宏、编译器优化会影响阅读


九、典型学习路线

  1. objdump -S vmlinux
  2. 看 start_kernel
  3. 配合源码对照
  4. 用 ftrace / GDB 验证

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

  • 你是 学习内核 / 安全研究 / 驱动调试
  • 用的是 x86 / ARM
  • 是否有 源码或 debug 符号

我可以给你更具体的反汇编示例和阅读技巧。

0 踩