Windows保护模式学习笔记(七)—— PDEPTE
Windows保護模式學習筆記(七)—— PDE&PTE
- Cr3
- PDE(頁目錄表項)
- PTE(頁表項)
- 物理頁的屬性
- 10-10-12分頁的補充
- 實驗1:證明PTE的特征1
- 第一步:選擇一個進程的Cr3
- 第二步:查看頁表
- 實驗2:通過修改頁表使C語言能在0地址處讀寫
- 第一步:得到一個變量的地址
- 第二步:掛載PTE為0的物理頁
- 第三步:繼續運行程序
- 實驗3:通過修改物理頁屬性使字符串常量可修改
- 第一步:運行程序
- 第二步:修改對應PTE的屬性
- 第三步:繼續運行程序
- 實驗4:通過修改物理頁屬性使普通用戶讀取高2G內存
- 第一步:運行如下代碼
- 第二步:修改PDE與PTE的U/S位
- 第三步:繼續運行程序
Cr3
描述:
在所有的寄存器中,只有Cr3存儲的是物理地址,其它寄存器存的都是線性地址
Cr3所存儲的物理地址指向了一個頁目錄表(PDT)
在Windows中,一個頁的大小通常為4KB,即一個頁可以存儲1024個頁目錄表項(PDE)
物理頁結構圖:
PDE(頁目錄表項)
描述:
頁目錄表(PDT)的每一項元素稱為頁目錄表項(PDE)
每個頁目錄表項指向一個頁表(PTT)
每個頁表的大小為4KB,即一個頁表可以存儲1024個頁表項(PTE)
PTE(頁表項)
描述:
頁表(PTT)的每一個元素稱為頁表項(PTE)
頁表項(PTE)所指向的才是真正的物理頁
特征:
物理頁的屬性
物理頁的屬性=PDE屬性& PTE屬性
P位:是否有效位
注意:當PDE或PTE中有一個的屬性P=0時,物理頁就是無效的
R/W位:讀寫位
R/W=0:只讀
R/W=1:可讀可寫
U/S位:權限位
U/S=0:特權用戶
U/S=1:普通用戶
PS位:PDE特有
PS == PageSize
PS=1:PDE直接指向物理頁,低22位=頁內偏移,偏移最大值為4MB,俗稱"大頁"
PS=0:PDE指向PTE
A位:訪問位
A=1:該PDE/PTE被訪問過
A=0:該PDE/PTE未被訪問過
D位:臟位
D=1:該PDE/PTE被寫過
D=0:該PDE/PTE未被寫過
注:其他位等學完控制寄存器與TLB才能講,本篇不講
10-10-12分頁的補充
為什么要按10-10-12分頁:
注:以下實驗的分頁方式都為10-10-12分頁
實驗1:證明PTE的特征1
第一步:選擇一個進程的Cr3
我這里啟動了一個記事本:notepad.exe
第二步:查看頁表
查看當線性地址為0時,進程的頁表
可以發現有許多頁表項都為0,沒有指向任何物理頁
實驗2:通過修改頁表使C語言能在0地址處讀寫
第一步:得到一個變量的地址
運行代碼如下:
#include <stdio.h> #include <windows.h>int main(int argc, char *argv[]) {int x = 1;printf("x的地址:%x\n", &x);getchar();// 向0地址寫入數據*(int*)0 = 123;// 從0地址讀出數據printf("0地址的數據:", *(int*)0);getchar();return 0; }程序運行后,首先會輸出x的地址
第二步:掛載PTE為0的物理頁
使用WinDbg將虛擬機中斷,將變量x所在的物理頁掛載到線性地址0的PTE
第三步:繼續運行程序
運行結果:
成功對0地址進行了讀寫,實驗成功!
實驗3:通過修改物理頁屬性使字符串常量可修改
第一步:運行程序
代碼如下:
#include <stdio.h> #include <windows.h>int main(int argc, char *argv[]) {char *str = "Hello World";printf("線性地址:%x", str);getchar(); // 讓程序執行到這里//修改只讀變量str[0] = 'M';printf("修改后的值:%s\n",str);return 0; }這時候得到了str的地址:
第二步:修改對應PTE的屬性
第三步:繼續運行程序
運行結果:
修改成功!
實驗4:通過修改物理頁屬性使普通用戶讀取高2G內存
第一步:運行如下代碼
#include <stdio.h> #include <windows.h>int main(int argc, char *argv[]) {PDWORD p = (PDWORD)0x8003F00C;getchar(); // 讓程序運行到這里printf("讀取高2G內存:%x \n", *p);return 0; }第二步:修改PDE與PTE的U/S位
第三步:繼續運行程序
運行結果如下:
成功讀取了高2G的內存!
總結
以上是生活随笔為你收集整理的Windows保护模式学习笔记(七)—— PDEPTE的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Windows保护模式学习笔记(六)——
- 下一篇: Windows保护模式学习笔记(八)——