0x01 可装载模块分类
设备驱动
文件系统
系统调用
0x02 版本检查
Linux 的迅速发展致使相邻版本的内核之间亦存在较大的差异,即在版本补丁号(Patch Level,即内核版本号的第四位数)相邻的内核之间。为此 Linux 的开发者为了保证内核的稳定,Linux 在加载模块到内核时对模块采用了版本校验机制。
1,Invalid module format -> disagrees about version of symbol module_layout
由于模块中 module_layout 的导出符号的版本信息与当前内核中的不符
函数 module_layout 的第二个参数 ver 存储了模块的版本校验信息。结构体 modversion_info 中保存了用于模块校验的 CRC(Cyclic Redundancy Check,即循环冗余码校验)值
2,Linux 对可装载模块采取了两层验证:模块的 CRC 值校验和 vermagic 的检查
CRC 值校验针对模块(内核)导出符号,是一种简单的 ABI(即 Application Binary Interface)一致性检查(1中的disagrees about version of symbol module_layout 就有由于没有通过 CRC 值校验,即 module_layout 的 CRC 值与当前内核中的不符)
模块 vermagic(即 Version Magic String)则保存了模块编译时的内核版本以及 SMP 等配置信息
3,模块的 vermagic 信息
# uname – r