保護模式中的PDE與PTE

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中。 

 

  

相關文章
相關標籤/搜索