Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
为了在内核模块中写入只读内存位置(这种内存位置的示例是 sys_call 表),通过操作 CR0 寄存器的第 16 位来禁用页面保护是否足够? 还是我们需要更多的东西来写入只读内存位置?
如果您禁用页面写保护,您可能会破坏依赖它的某些内容(例如,内核页面上发生的任何写时复制)。如果你这样做,你可能想暂时禁用中断/调度,所以内存修改在那个 CPU 上看起来是原子的,如果你有超过 1 个,这也可以避免将线程移动到不同的 CPU。
我不确定使用像 0xc12c9e90 这样的硬编码地址是个好主意。我不知道 Linux 如何在地址空间的内核部分中布置东西,但是由于动态内存分配或出于安全原因,地址可能会从一个引导更改为另一个引导(移动东西是有用的,因为它减少了机会利用内核错误)。