Windows內核分析索引目錄:https://www.cnblogs.com/onetrainee/p/11675224.htmlhtml
保護模式中的PDE與PTE編程
1. PDE與PTE的認知測試
咱們在上一節,10-10-12模式中已經見過下表。spa
PDT(Page Direcotry Table)y頁目錄表,其中每個成員被稱爲頁目錄表成員。code
PTT(Page Table)頁表,其中每個成員被稱爲頁表成員。
htm
頁目錄表、頁表與物理頁,本質上都是頁。 blog
10-10-12模式遵循4KB大小的機制,即每個頁大小爲4KB。 索引
頁目錄表與頁表存內存,因此能夠一共有 1KB = 2^10個;而物理頁存儲字節,共存2^12個;所以10-10-12分頁就是這麼來的。內存
2、向零地址讀寫內存get
咱們有編程經驗的人知道,零地址其實不能夠讀寫的。
其本質緣由是由於 00000000h 這個線性地址對應的物理地址沒有掛靠物理頁,也即對應的PTE=0,天然物理頁索引就不存在。
可是,咱們能夠經過windbg往0地址中掛靠物理頁,這樣就很容易實現對零地址的內存讀寫。
測試代碼
1 #include "stdafx.h" 2 3 int main(int argc, char* argv[]) 4 { 5 // 將X的物理頁掛靠0地址上 6 int x = 1; 7 printf("x address: %x\n",&x); 8 getchar(); 9 10 *(int*)0 = 123; 11 printf("0 address data: %x\n",*(int*)0); 12 return 0; 13 }
對應操做(若是看不懂操做,完成上一節10-10-12分頁中後面的實驗)
咱們找到變量x的地址,拆分其內存地址找到掛靠的物理頁PTE地址(0-12f*4-f7c),以後將其掛靠在0000000h對應的PTE中。