PDE和PTE屬性(U/S位和PS位和A位和D位)


前言:PDE_PTE屬性(U/S位和PS位和A位和D位)的筆記

上一篇筆記已經學習過了R/W位和P位,一個是讀寫位,還有一個是有效位,這里的話繼續來學習相關的U/S位和PS位和A位和D位

U/S位

U/S位是PDE和PTE都具備的屬性,這個屬性的含義是表示訪問指定的物理頁的用戶是否為特權用戶

U/S = 0 特權用戶

U/S = 1 普通用戶

練習

修改一個高2G線性地址的PDE/PTE屬性,實現Ring3可讀.

拆分

0x8003F00C
->
1000 0000 00 *4->800
00 0011 1111 *4->FC
00C

修改該線性地址對應的PDE和PTE的U/S位為1即可,修改如下

PDE的修改如下

PTE的修改如下

結果如下,訪問發現報錯

查了別人的文章,發現說可能還需要改變下G位,置為0

參考文章:https://blog.csdn.net/qq_18059143/article/details/103285462

再次進行測試,可以成功進行讀取了

學習到了這里我們就可以總結兩種方法在8086中訪問高2G的內存了

第一種是通過門提權來進行0環,然后去讀內存,其實就是通過段提高了權限來訪問高2G

第二種就是今天學習的就是通過修改PDE和PTE的的U/S位的屬性,然后去讀內存,其實也就是降低了頁的權限來訪問高2G(可能有人會問,那段呢?默認數據段就是可以訪問對應的RPL為3的段描述符的呀,所以段肯定是可以的!)

總結相關知識點:

1、2G以上是內核才能訪問的原因是U/S位的設置問題,如果將內核的某個頁設置為1 就可以在R3訪問了(理解)

2、0 1 2是系統環 可以訪問系統頁和用戶頁。0環是特權級環,1、2環雖然不是特權級環,但是也是系統環,3環是用戶環,可以訪問用戶頁(沒有真正的理解這個點的意思)

關於PDE和PTE的G位

意思好像就是如果置1的話,那么如果當前的PDE或者PTE被改變,但是不會導致頁屬性失效,還是保持原來的頁屬性

PS位

只對PDE有意義,PS == PageSize的意思當PS==1的時候 PDE直接指向物理頁 無PTE,低22位是頁內偏移。

線性地址只能拆成2段:大小為4MB,俗稱"大頁"

所以在看PDE的時候,先看P位,再看PS位,如果PS位不是為1,那么就正常4kb的看,如果不是那么就是大頁,低22就是業內偏移

練習

分析8043F00C線性地址的PDE屬性

拆分

8043F00C
->
1000 0000 01 *4 -> 0x804
00 0011 1111 *4 -> 0xFC
00C

來進行尋找對應的PDE,如下圖所示,為0x004009e3

對0x004009e3進行拆分

第低2位為e -> 1110,那么ps位1,所以PDE指向的就直接是物理頁了,那么偏移地址為低22位是頁內偏移,也就是00 0000 1001 1110 0011 -> 0x9e3

A位

是否被訪問(讀或者寫)過,默認為0,如果訪問過則置1,即使只訪問一個字節也會導致PDE/PTE的A位置1

D位

D(dirty),個人理解,所以被稱呼為臟位

D臟位:是否被寫過,默認為0,0沒有被寫過,1被寫過

無效的PTE

老師講解了當P位為0的時候,也就是PTE無效的時候的多種情形,它的過程為如下:

  • 先檢查P位是否有效
    • 如果P位無效,那么就會查詢中斷描述表中的第E個段描述符,產生異常
      • 再接着操作系統就會根據如下圖中去查詢PTE的情況
        • 最后根據下面對應的幾種處理來進行處理


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM