我正在编写一个由进程 p1 调用的内核模块,以覆盖属于目标进程 p2 的数据页。
首先,在内核模块内部,同时响应 p1 发出的对 proc 文件系统的写入事件。我使用目标进程(p2)的进程id来搜索后者的任务结构(p2_task)。
搜索我使用的特定页面get_user_pages()
,显然在 ( p2_task->mm
) 上调用它。然后我调用kmap()
了前一个函数返回的页面。获得指针后,我使用典型的内存函数 ( memset()
) 写入该内存。终于叫了kunmap()
。
但是,一旦进程再次开始运行,我可以看到我所做的对目标进程 p2 没有影响。
我不确定我做错了什么。任何人都可以帮忙吗?
我怀疑在响应来自 p2 的请求时,您无法以某种方式写入属于进程 p2 的内存。因为这里我们处于不同的环境中。
这是真的吗,如果不是我还能检查什么。如果是问题所在,无论如何我可以解决这个问题吗?