保护模式中的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中。 

 

  

  

猜你喜欢

转载自www.cnblogs.com/onetrainee/p/11722352.html