更改虚拟页面权限
Changing virtual page premissions
我试图通过将 sys_call_table 中存储的指针替换为指向我实现的函数的指针来覆盖我模块中的 kill 命令。
我使用 kallsyms_lookup_name()
系统调用获取 table 的地址,并使用 lookup_address()
获取页面地址。
现在,我的问题是内核用 r/w 标志保护页面。
那么,给定一个虚拟页面地址,有没有办法修改r/w标志?
你需要这个吗?
https://elixir.bootlin.com/linux/v4.3/source/arch/arm/mm/pageattr.c#L68\
至少,您可以更改内核模块的内存属性。此外,您还可以更改内核文本内存属性。
据我测试,如果我们尝试在内核模块中写入 ro 内存,MMU 将产生异常,您将看到 "invalid virtual memory" 访问。
你必须传递虚拟内存地址。
我试图通过将 sys_call_table 中存储的指针替换为指向我实现的函数的指针来覆盖我模块中的 kill 命令。
我使用 kallsyms_lookup_name()
系统调用获取 table 的地址,并使用 lookup_address()
获取页面地址。
现在,我的问题是内核用 r/w 标志保护页面。
那么,给定一个虚拟页面地址,有没有办法修改r/w标志?
你需要这个吗?
https://elixir.bootlin.com/linux/v4.3/source/arch/arm/mm/pageattr.c#L68\
至少,您可以更改内核模块的内存属性。此外,您还可以更改内核文本内存属性。
据我测试,如果我们尝试在内核模块中写入 ro 内存,MMU 将产生异常,您将看到 "invalid virtual memory" 访问。
你必须传递虚拟内存地址。