kmod-loader 0.2.0

Rust implementation of Linux kernel module loader for loadable kernel module development
Documentation

kmod-loader

Rust内核模块动态加载库,支持ELF格式的内核模块加载和执行。

功能

  • ELF解析 - 使用goblin库解析ELF格式的模块文件
  • 动态加载 - 分配内存、加载段、处理重定位
  • 符号解析 - 解决内核符号和模块内部符号引用
  • 权限管理 - 为不同段设置读、写、执行权限
  • 多架构支持 - 支持x86_64、riscv64、aarch64等架构

核心组件

  • ModuleLoader - 负责解析和加载ELF模块
  • ModuleOwner - 封装已加载的模块,管理其生命周期
  • KernelModuleHelper - 用户实现的辅助函数接口(符号解析、内存分配等)
  • SectionMemOps - 内存段操作接口

使用示例

use kmod_loader::{ModuleLoader, KernelModuleHelper, ModuleOwner};

struct MyHelper;

impl KernelModuleHelper for MyHelper {
    fn vmalloc(size: usize) -> Box<dyn SectionMemOps> {
        // 分配内存
    }
    
    fn resolve_symbol(name: &str) -> Option<usize> {
        // 解析符号地址
    }
}

// 加载模块
let mut loader = ModuleLoader::<MyHelper>::new(elf_data)?;
let mut module = loader.load_module(args)?;

// 调用初始化函数
module.call_init()?;

// 调用退出函数
module.call_exit();