在Linux内核中写入只读内存

时间:2013-01-27 03:47:37

标签: linux linux-kernel x86 kernel-module kernel

为了在内核模块中写入只读内存位置(这样的内存位置的示例是sys_call表),是否足以通过操作CR0寄存器的第16位来禁用页面保护?登记/> 或者我们是否需要更多内容才能写入只读内存位置?

1 个答案:

答案 0 :(得分:0)

如果禁用页面写保护,则可能会破坏依赖于它的内容(例如,在内核页面上发生的任何写时复制)。如果你这样做,你可能想暂时禁用中断/调度,因此内存修改在该CPU上看起来是原子的,如果你有超过1的话,这也会避免将线程移动到不同的CPU。

我不确定使用像0xc12c9e90这样的硬编码地址是个好主意。我不知道Linux如何在地址空间的内核部分中列出内容,但是由于动态内存分配或出于安全原因,地址可能会从一次启动变为另一次启动(移动物体是有用的,因为它减少了机会)利用内核错误。)