码迷,mamicode.com
首页 > Windows程序 > 详细

Windows PAE 寻址

时间:2015-08-16 07:05:39      阅读:181      评论:0      收藏:0      [点我收藏+]

标签:

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:

技术分享

 

Windows PAE 寻址

标签:

原文地址:http://www.cnblogs.com/lanrenxinxin/p/4733529.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!