无法通过Linux内核模块(Ubuntu)在内核内存中写入

时间:2010-03-03 19:55:23

标签: linux memory kernel

我正在尝试通过内核模块覆盖虚拟机(使用VirtualBox)中的内核内存(Linux 2.6.31,Ubuntu 9.10)中的某些部分。 每当我这样做时,我都会收到此错误

  

[27154.303726] BUG:无法在0xc05769bc处理内核分页请求

我的代码:

unsigned char *p = (unsigned char *) c05769bc;
p[1] = (addr & 0x000000ff);
p[2] = (addr & 0x0000ff00) >> 8;
p[3] = (addr & 0x00ff0000) >> 16;
p[4] = (addr & 0xff000000) >> 24;

地址是正确的,我的写代码也是如此。我只是使用指针写入内核内存。 我想知道为什么我得到这条消息,因为该地址的内存页肯定是在内存中。

此行为是否与虚拟机有关?或者最近的内核是否有内置的某种保护?我希望有人能给我一些线索。

问题似乎与Ubuntu有关,因为使用Debian时相同的代码不会失败。

TIA!

威廉

2 个答案:

答案 0 :(得分:3)

ASLR也许(地址空间布局随机化)?

它可以由/proc/sys/kernel/randomize_va_space控制(在其中回显0应该将其关闭)。

答案 1 :(得分:2)

最近的内核使他们的文本部分为只读 - 应该生活在你想要戳的地址上的内容是什么?