• 979阅读
  • 0回复

Windows PAE 寻址 [复制链接]

上一主题 下一主题
离线天道酬勤
 

只看楼主 倒序阅读 使用道具 楼主  发表于: 2016-05-19
— 本帖被 天道酬勤 从 编程技术交流 移动到本区(2016-05-19) —

PAE 就是物理地址扩展。我们常规的寻址方式是之前的将虚拟地址化为10 10 12的方式来寻址页目录,页表,页偏移,但是在开始PAE之后的寻址方式发生了改变,将32位的虚拟地址转化成 2 9 9 12的方式来寻址:

理论就不赘述了,和普通的寻址方式没有太大的差别,具体可以参考之前的文章:x86虚拟地址到物理地址的学习,主要的差别就是由二级页表衍生成三级页表。
31~30: 页目录指针表的索引
21~29: 页目录表索引
12~20: 页表索引
0~11:   页内偏移

下面以一个简单的例子来学习:

int _tmain(int argc, _TCHAR* argv[]){char szName[20] = "HelloWorld";printf("szName:%x\n",szName);getchar();return 0;}


打印出的地址是0x12ff4c,我们接下来就在物理地址中找到我们的“Hello World”
12 f f4c
页目录指针表的索引          页目录表索引            页表索引                    页内偏移
            00                  0 0000 000          1 0010 1111           1111 0100 1100
             0                         0                        12f                           f4c

cc.exx进程的页表目录指针的物理地址是10b00200,而目标目录指针索引为0,所以就是5a8a4001,因此页目录表的物理首地址就是5a8a4000。

而我们的页目录表索引也为0:

页表的物理页首地址就是5a5b3000,而页表索引是0x12f 因此页表项为5a5b3000+0x12f*8:

所以我们的物理页首地址就是5a8b7000,而页内偏移是:f4c,因此szName的物理地址为5a8b7f4c:
快速回复
限100 字节
批量上传需要先选择文件,再选择上传
 
上一个 下一个