2014-06-25 66 views
0

在x86或x64 Linux中,我試圖創建一個內核模塊來更改特定的內核頁面權限,以允許用戶應用程序訪問該內存。例如,如果在0xC0001000處有一個可讀的內核頁面(假設它是3:1分割),我想要更改此頁面的用戶/主管位,並允許用戶應用程序執行此類操作。更改允許用戶訪問的內核頁面權限

int* m = 0xC0001000; 
printf("reading kernel memory from user : %08x\n", *m); 

以我內核模塊,我改變相應的內核存儲器頁的訪問位0×67從到0x63(低位比特111 - > 011)清除管理位。

之後,我使用invdpg指令刷新了虛擬地址0xc0001000的TLB。 我已確認我操作的頁面條目的確是相應的。 但是,從用戶應用程序訪問0xC0001000仍然會導致分段錯誤。 我在這裏錯過了重要的東西嗎?也許CS段和GDT?或者是不相關的?

一些建議是好的,謝謝你提前:)

回答

0

從你的內核模塊你可以改變有效用戶ID爲0,以讓它讀/dev/kmem

+0

謝謝你,但是這不是什麼我想......我想讓用戶應用程序(CPL3)直接訪問內核虛擬地址。這是它自己的目標 – daehee

+0

@daehee嗯,'/ dev/kmem'是內核虛擬地址空間,對於用戶空間應用程序來說,它需要的只是root權限。 –

相關問題