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?或者是不相關的?
一些建議是好的,謝謝你提前:)
謝謝你,但是這不是什麼我想......我想讓用戶應用程序(CPL3)直接訪問內核虛擬地址。這是它自己的目標 – daehee
@daehee嗯,'/ dev/kmem'是內核虛擬地址空間,對於用戶空間應用程序來說,它需要的只是root權限。 –