Windows保护模式学习笔记(八)—— 页目录表基址/页表基址
生活随笔
收集整理的這篇文章主要介紹了
Windows保护模式学习笔记(八)—— 页目录表基址/页表基址
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Windows保護模式學習筆記(八)—— 頁目錄表基址/頁表基址
- 要點回顧
- 一、頁目錄表基址
- 實驗:拆分線性地址C0300000,并查看其對應的物理頁
- 第一步:打開一個進程,獲得它的Cr3
- 第二步:查看進程的PDT表
- 第三步:拆分線性地址
- 第四步:查看線性地址對應的物理頁
- 實驗總結
- 二、頁表基址
- 實驗:拆分線性地址C0000000,并查看其對應的物理頁
- 第一步:打開一個進程,獲得它的Cr3
- 第二步:查看進程的PDT表
- 第三步:拆分線性地址
- 第四步:查看線性地址指向的PDE所對應的PTT表
- 第五步:查看線性地址C0001000對應的PTT表
- 實驗總結
- 總結
要點回顧
在上一節課課后題中我們提到過,如果系統要保證某個線性地址是有效的,那么必須為其填充正確的PDE與PTE
如果我們想填充PDE與PTE,那么必須能夠訪問PDT與PTT,這樣就存在2個問題:
注意:
CR3中存儲的是物理地址,不能在程序中直接讀取的。如果想讀取,也要把Cr3的值掛到PDT和PTT中才能訪問,那么怎么通過線性地址訪問PDT和PTT呢?
注意:以下所有實驗的分頁方式均為10-10-12分頁
一、頁目錄表基址
頁目錄表基址 = 線性地址:C0300000
實驗:拆分線性地址C0300000,并查看其對應的物理頁
第一步:打開一個進程,獲得它的Cr3
我這里打開的是notepad.exe
第二步:查看進程的PDT表
注意PDT表中的數據
第三步:拆分線性地址
十六進制:C0300000 =二進制:1100 0000 001100 0000 000000 0000 0000 =十六進制:300300000第四步:查看線性地址對應的物理頁
注意:若不知道怎么查找物理頁可以翻看前兩篇筆記
可以發現 物理頁的內容 與 PDT表的內容 完全相同
實驗總結
結構圖如下:
二、頁表基址
頁表基址 = 線性地址:C0000000
實驗:拆分線性地址C0000000,并查看其對應的物理頁
第一步:打開一個進程,獲得它的Cr3
我這里打開的是notepad.exe
第二步:查看進程的PDT表
查看前三個PDE所對應的PTT表
第一張PTT表:
第二張PTT表:
第三張PTT表:
第三步:拆分線性地址
十六進制:C0000000 =二進制:1100 0000 000000 0000 000000 0000 0000 =十六進制:300000000第四步:查看線性地址指向的PDE所對應的PTT表
查看前三個PTE所對應的物理頁
第一張物理頁:
第二張物理頁:
第三張物理頁:
可以發現 每一項PTE所指向的物理頁的內容 與 每一個PDE所指向的PTT表的內容完全相同
第五步:查看線性地址C0001000對應的PTT表
發現線性地址C0001000指向的PTT表的第一項PTE為線性地址C0000000指向的PTT表的第二項PTE
實驗總結
結構圖如下:
總結
掌握了這兩個地址,就掌握了一個進程所有的物理內存讀寫權限
訪問頁目錄表的公式:C0300000 + PDI*4(I=index)
訪問頁表的公式:0xC0000000 + PDI*4096 + PTI*4(I=index)
總結
以上是生活随笔為你收集整理的Windows保护模式学习笔记(八)—— 页目录表基址/页表基址的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Windows保护模式学习笔记(七)——
- 下一篇: Windows保护模式学习笔记(九)——