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

 

  

相关文章
相关标签/搜索