天天看點

【2021.03.31】頁目錄表基址要點回顧頁目錄表基址(XP系統 10-10-12分頁模式)總結

要點回顧

【2021.03.31】頁目錄表基址要點回顧頁目錄表基址(XP系統 10-10-12分頁模式)總結
【2021.03.31】頁目錄表基址要點回顧頁目錄表基址(XP系統 10-10-12分頁模式)總結

在前文中提到,如果系統要保證某個線性位址是有效的,那麼必須為其填充正确的PDE與PTE。

如果想填充PDE與PTE,那麼必須能夠通路PDT與PTT。

這樣就存在兩個問題:

  1. 一定已經有 "人" 為我們通路PDT與PTT挂好了PDE與PTE,我們隻要找到這個線性位址就可以。
  2. 這個位我們挂好PDE與PTE的 "人" 是誰?

頁目錄表基址(XP系統 10-10-12分頁模式)

【2021.03.31】頁目錄表基址要點回顧頁目錄表基址(XP系統 10-10-12分頁模式)總結

頁目錄表基址:0xC0300000。

拆分0xC0300000

1.尋找目标程式CR3

!process 0 0

【2021.03.31】頁目錄表基址要點回顧頁目錄表基址(XP系統 10-10-12分頁模式)總結

2.檢視CR3實體位址

!dd 24450000

【2021.03.31】頁目錄表基址要點回顧頁目錄表基址(XP系統 10-10-12分頁模式)總結

得到了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

【2021.03.31】頁目錄表基址要點回顧頁目錄表基址(XP系統 10-10-12分頁模式)總結

 5.尋找PTE

!dd 24450000 + C00

【2021.03.31】頁目錄表基址要點回顧頁目錄表基址(XP系統 10-10-12分頁模式)總結

6.檢視實體頁

!dd 24450000

【2021.03.31】頁目錄表基址要點回顧頁目錄表基址(XP系統 10-10-12分頁模式)總結

得到了0xC0300000的實體頁,對比第二步的結果可以發現:0xC0300000中儲存的内容剛好是PDT(頁目錄表)的内容。

小結

0xC0300000儲存的值就是PDT的基址,如果要通路第N個PDE,那麼有公式:0xC0300000 + N *4。

總結

【2021.03.31】頁目錄表基址要點回顧頁目錄表基址(XP系統 10-10-12分頁模式)總結
  1. 通過0xC0300000找到的實體頁就是頁目錄表,而不是兩份表,其實就是一份。
  2. 這個實體頁即是頁目錄表(PDT),本身也是頁表(PTT)。
  3. 頁目錄表(PDT)是一張特殊的頁表,每一項PTE指向的不是普通的實體頁,而是指向其他的頁表(PTT)。
  4. 如果要通路第N個PDE,有如下公式:0xC0300000 + N *4。
也就是說,在連結:https://blog.csdn.net/qq_18120361/article/details/115254807 中列出的表(PDE與PTE)中:
【2021.03.31】頁目錄表基址要點回顧頁目錄表基址(XP系統 10-10-12分頁模式)總結
沒有那個單獨的PDT表,單獨的PDT表本身就是PTT,本身也是一個實體頁。

繼續閱讀