温馨提示×

如何反汇编CentOS内核模块

小樊
47
2026-08-30 10:29:07
栏目: 智能运维

下面以 CentOS 7 / 8 为例,系统性地说明 如何反汇编 Linux 内核模块(.ko 文件)。适用于安全分析、驱动调试、逆向学习等场景。


一、确认内核模块文件

内核模块通常是 .ko 文件:

modinfo your_module.ko

或者查看已加载模块:

lsmod

对应文件通常在:

/lib/modules/$(uname -r)/kernel/

二、准备反汇编工具(推荐)

✅ 1. objdump(最常用)

安装:

yum install -y binutils

反汇编整个模块:

objdump -d your_module.ko > module.asm

常用选项:

objdump -d -M intel your_module.ko > module.asm
  • -d:反汇编可执行段
  • -M intel:使用 Intel 语法(默认是 AT&T)
  • -S:源码+汇编(需要带调试信息)

✅ 2. readelf(分析结构)

readelf -h your_module.ko
readelf -S your_module.ko

查看:

  • 入口点
  • 段表(.text / .init.text / .exit.text)
  • 符号表

✅ 3. nm(查看符号)

nm your_module.ko

或:

nm -l your_module.ko

帮助你定位函数名(如 init_modulecleanup_module)。


三、反汇编重点关注区域

1️⃣ 模块初始化 / 卸载函数

objdump -d your_module.ko | grep -A 30 "<init_module>"
objdump -d your_module.ko | grep -A 30 "<cleanup_module>"

或:

objdump -d your_module.ko | grep -E "module_init|module_exit"

2️⃣ 常见内核模块段

段名 作用
.text 主代码
.init.text 初始化代码
.exit.text 卸载代码
.rodata 只读数据
.modinfo 模块信息

列出段:

objdump -h your_module.ko

四、带调试符号的反汇编(高级)

如果模块编译时带 -g

objdump -S -d your_module.ko > module_with_src.asm

能看到 C 源码 + 汇编混合


五、使用 GDB 反汇编(动态 / 静态)

静态分析

gdb your_module.ko
(gdb) disassemble init_module

动态分析(已加载模块)

gdb vmlinux /proc/kcore

⚠️ 不推荐初学者直接操作 running kernel。


六、分析已加载模块(实战)

1️⃣ 找到模块加载地址

cat /proc/modules

或:

lsmod

2️⃣ 查看模块 ELF 信息

cat /sys/module/模块名/sections/.text

结合 /proc/kallsyms 分析运行地址。


七、常见问题

❓ 符号名被 strip 了怎么办?

file your_module.ko

如果显示 stripped,反汇编结果只有地址:

✅ 解决方案:

  • 未 strip 的版本
  • 使用 /proc/kallsyms
  • 使用 addr2line(如有调试信息)

❓ CentOS 官方模块没有调试符号?

安装 debuginfo:

yum install -y kernel-debuginfo

模块符号通常在:

/usr/lib/debug/lib/modules/$(uname -r)/kernel/

八、推荐工具链总结

工具 用途
objdump 反汇编
readelf ELF 结构
nm 符号
gdb 高级分析
r2 / Ghidra / IDA 高级逆向

九、一个完整示例

objdump -d -M intel hello.ko > hello.asm
less hello.asm

搜索:

/init_module
/module_init

即可定位核心逻辑。


如果你愿意,我可以:

  • ✅ 帮你 逐行分析一个内核模块汇编
  • ✅ 演示 CentOS 8 + 内核模块 + GDB
  • ✅ 对比 .ko vs vmlinux 反汇编差异

直接把模块名或架构(x86_64 / ARM)发我即可。

0