温馨提示×

如何反汇编linux内核

小樊
61
2026-09-24 17:02:29
栏目: 智能运维

反汇编 Linux 内核通常用于调试、漏洞分析、内核学习或逆向工程。下面按常见场景和方法系统说明。


一、准备前提

1. 获取内核镜像

常见内核文件:

  • vmlinux:未压缩、含符号表(最理想)
  • vmlinuz / bzImage:压缩镜像(需解压)
  • /proc/kcore:运行中的内核内存(调试用)

✅ 优先使用 vmlinux


二、使用 objdump 反汇编(最常用)

1. 反汇编整个内核

objdump -d vmlinux > kernel.asm

2. 反汇编指定函数

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

或更精确:

objdump -d --start-address=0xffffffff81234567 \
           --stop-address=0xffffffff81234600 vmlinux

3. 带源码对照

objdump -S vmlinux > kernel_src_asm.txt

(需内核编译时开启 -g)


三、使用 gdb(推荐调试场景)

1. 加载内核

gdb vmlinux

2. 反汇编函数

disassemble sys_open

3. 反汇编地址

disassemble 0xffffffff81234567

4. 配合 QEMU 调试运行内核

qemu-system-x86_64 -kernel bzImage -s -S
gdb vmlinux
target remote :1234

四、反汇编压缩内核(bzImage)

1. 提取 vmlinux

使用 extract-vmlinux 脚本:

scripts/extract-vmlinux bzImage > vmlinux

2. 再使用 objdump / gdb


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

objdump -d my_module.ko

或:

gdb my_module.ko

六、查看运行内核代码(/proc/kcore)

gdb vmlinux /proc/kcore

⚠️ 需要 root 权限,且内核未开启严格保护


七、常用编译选项(方便反汇编)

在内核配置中开启:

CONFIG_DEBUG_INFO=y
CONFIG_KALLSYMS=y

八、进阶工具

  • radare2 / rizin
  • IDA Pro(Linux 版)
  • Ghidra
  • bpftrace / perf(动态分析)

九、典型用途

  • 分析系统调用实现
  • 内核漏洞利用研究
  • 驱动逆向
  • 学习调度 / 内存管理

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

  • x86 / ARM?
  • 想反汇编 整个内核 / 某个函数 / 运行中内核?
  • 是否用于 CTF / 漏洞 / 学习?

我可以给你更精确的命令和示例。

0 踩