修改页面 table read/write 位以修改系统调用 table

modify page table read/write bits to modify system call table

我要修改__NR_fork入口的地址是系统调用table

所以我会做这样的事情:sys_call_table_addr[__NR_fork] = newaddress;

但我想更改页面中的 read/write 位 table 以便能够对其进行修改 关于如何做到这一点的任何提示?

不确定这将如何满足您的目的,但一般来说,页面 table 的机制是:

  1. 页面 table 步行找到页面 table 条目 (pte)。我知道的两种方法是手动的,比如在定义 here or with a walk_page_range() call that does the walk for you with other helper walk functions defined here__handle_mm_fault() 函数中是如何完成的。请注意,__handle_mm_fault()pmd 转换为 pte 的最后一步留给了 handle_pte_fault() 函数。

  2. 修改页面table条目(pte)位的函数。 pte_set_flags()pte_mkclean()pte_mkwrite()等相关函数定义here