我试图通过将存储在sys_call_table中的指针替换为我实现的函数的指针来覆盖模块中的kill命令。我使用kallsyms_lookup_name()
syscall来获取表的地址,并使用lookup_address()
来获取页面的地址。现在,我的问题是内核使用r / w标志保护页面。那么,给定一个虚拟页面地址,是否可以修改r / w标志?
您需要这个吗?
https://elixir.bootlin.com/linux/v4.3/source/arch/arm/mm/pageattr.c#L68 \
至少,您可以更改内核模块的内存属性。另外,您也可以更改内核文本内存属性。
据我测试,如果我们尝试在内核模块中写入ro内存,则MMU将生成异常,并且您将看到“无效的虚拟内存”访问权限。
您必须传递虚拟内存地址。