0

我想使用我的 Unix 模块来写入另一个进程内存(我想在内核模式下进行并避免使用 pthread 接口)。
我必须使用影响当前进程内存而不是我希望它影响的进程的函数(如 do_mmap(..)、do_unmmap(..)、sys_mprotect(..) 等)。

所以我想,我需要找到一种方法来对我想要的进程进行上下文切换,以使我想要的进程成为当前进程。我试图复制 schedule() 的实现,并稍作改动:我替换了以下行:

下一个 = pick_next_task(rq);

和:

下一个 = 我的下一个;

我的问题是 schedule 需要太多我无法包含的结构和函数,所以我必须重新实现它们。做这样的事情似乎很糟糕。你有什么建议吗?

我想避免修改现有的内核,所以我不必强迫用户重新启动和修改他们的操作系统来使用我的程序(这就是我使用模块的原因)。

顺便说一句,我使用的是“2.6.38-11-generic”版本的 Linux。

4

1 回答 1

1
  1. 使用get_user_pages()函数获取目标进程的页面(更准确地说,它的 mm_struct)
  2. kmap()通过或kmap_atomic()(取决于上下文)映射您需要的页面
  3. 在映射返回的地址处写入/读取(带有页面大小)。
  4. kunmap()通过或销毁映射kunmap_atomic()
于 2011-10-11T23:33:57.760 回答