保護模式中的PDE與PTE


Windows內核分析索引目錄:https://www.cnblogs.com/onetrainee/p/11675224.html

保護模式中的PDE與PTE

1. PDE與PTE的認知

  我們在上一節,10-10-12模式中已經見過下表。

   PDT(Page Direcotry Table)y頁目錄表,其中每一個成員被稱為頁目錄表成員。

   PTT(Page Table)頁表,其中每一個成員被稱為頁表成員。

   

  頁目錄表、頁表與物理頁,本質上都是頁。

  10-10-12模式遵循4KB大小的機制,即每一個頁大小為4KB。  

  頁目錄表與頁表存內存,所以可以一共有 1KB = 2^10個;而物理頁存儲字節,共存2^12個;因此10-10-12分頁就是這么來的。

 

二、向零地址讀寫內存

  我們有編程經驗的人知道,零地址其實不可以讀寫的。

  其本質原因是因為 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中。 

 

  

 

 

 

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM