0

我想用我的Unix模塊寫入另一個進程內存(我想在內核模式下執行並避免使用pthread接口)。
我必須使用影響當前進程內存的函數(如do_mmap(..),do_unmmap(..),sys_mprotect(..)等),而不是我希望它影響的進程。如何在內核模式下寫入某個進程的虛擬內存

所以我想,我需要找到一種方法來做一個上下文切換到我想要的過程,以使我想要的過程。我試圖通過一個小的改變來複制schedule()的實現: 我替換了這一行:

next = pick_next_task(rq);

附:

next = myNext;

我的問題是,時間表需要這麼多的結構和功能,我不能包括,所以我不得不重新實現它們。做這樣的事情似乎很糟糕。你有什麼建議嗎?

我想避免修改現有的內核,所以我不必強制用戶重新啓動並修改他們的操作系統以使用我的程序(這就是爲什麼我使用模塊)。

順便說一句,我使用Linux的「2.6.38-11-generic」版本。

+0

是否運行在進程上下文或BH /中斷上下文代碼摧毀映射? – Mircea

回答

1
  1. 使用get_user_pages()函數來獲取目標進程的頁面(更準確地說,它的mm_struct)
  2. 地圖,你通過kmap()kmap_atomic()需要的頁面(S)(根據上下文)
  3. 在映射返回的地址寫入/讀取(使用頁面大小)。
  4. 通過kunmap()kunmap_atomic()
+0

請記住,有些頁面是隻讀的 – zoska