首页 > 解决方案 > 内核模块内存访问

问题描述

我是内核模块的新手,目前正在试验它。我读过它们与内核本身具有相同级别的访问权限。

这是否意味着他们可以访问物理内存并且可以查看/覆盖其他进程(包括内核内存空间)的值?

我已经编写了这个简单的 C 代码来覆盖每个内存地址,但它没有做任何事情(期望系统崩溃,不确定这是触及物理内存还是它仍然是虚拟内存)

我用 运行它sudo insmod ./test.ko,代码只是挂在那里(当然是因为无限循环)但是当我手动退出时系统工作正常。

#include <linux/module.h>
#include <linux/kernel.h>

int init_module(void)
{
    unsigned char *p = 0x0;
    while (true){
      *p=0;
      p++;
    }

    return 0;
}

void cleanup_module(void)
{
    //
}

标签: clinuxlinux-kernelkernel-module

解决方案


内核模块以内核权限运行(包括内核内存和所有外围设备)。您的代码不起作用的原因是您没有指定initandexit模块。所以你可以加载模块,但内核不会调用你的方法。

请查看示例以获取最小的内核模块。在这里,您将找到有关所需宏的一些说明。


推荐阅读