要點回顧

在前文中提到,如果系統要保證某個線性位址是有效的,那麼必須為其填充正确的PDE與PTE。
如果想填充PDE與PTE,那麼必須能夠通路PDT與PTT。
這樣就存在兩個問題:
- 一定已經有 "人" 為我們通路PDT與PTT挂好了PDE與PTE,我們隻要找到這個線性位址就可以。
- 這個位我們挂好PDE與PTE的 "人" 是誰?
頁目錄表基址(XP系統 10-10-12分頁模式)
頁目錄表基址:0xC0300000。
拆分0xC0300000
1.尋找目标程式CR3
!process 0 0
2.檢視CR3實體位址
!dd 24450000
得到了PDT(頁目錄表)。
3.拆分0xC0300000
0xC0300000 = 1100 0000 0011 0000 0000 0000 0000 0000
前10位二進制:1100 0000 00 -> 300*4 = C00
再10位二進制:11 0000 0000 -> 300*4 = C00
0000 0000 0000
4.尋找PDE
!dd 24450000 + C00
5.尋找PTE
!dd 24450000 + C00
6.檢視實體頁
!dd 24450000
得到了0xC0300000的實體頁,對比第二步的結果可以發現:0xC0300000中儲存的内容剛好是PDT(頁目錄表)的内容。
小結
0xC0300000儲存的值就是PDT的基址,如果要通路第N個PDE,那麼有公式:0xC0300000 + N *4。
總結
- 通過0xC0300000找到的實體頁就是頁目錄表,而不是兩份表,其實就是一份。
- 這個實體頁即是頁目錄表(PDT),本身也是頁表(PTT)。
- 頁目錄表(PDT)是一張特殊的頁表,每一項PTE指向的不是普通的實體頁,而是指向其他的頁表(PTT)。
- 如果要通路第N個PDE,有如下公式:0xC0300000 + N *4。
也就是說,在連結:https://blog.csdn.net/qq_18120361/article/details/115254807 中列出的表(PDE與PTE)中:沒有那個單獨的PDT表,單獨的PDT表本身就是PTT,本身也是一個實體頁。![]()
【2021.03.31】頁目錄表基址要點回顧頁目錄表基址(XP系統 10-10-12分頁模式)總結