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

理论就不赘述了,和普通的寻址方式没有太大的差别,具体可以参考之前的文章:x86虚拟地址到物理地址的学习,主要的差别就是由二级页表衍生成三级页表。

31~30: 页目录指针表的索引

21~29: 页目录表索引

12~20: 页表索引

0~11:   页内偏移

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

  1. int _tmain(int argc, _TCHAR* argv[])
  2. {
  3. char szName[] = "HelloWorld";
  4. printf("szName:%x\n",szName);
  5. getchar();
  6. return ;
  7. }

打印出的地址是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 寻址的更多相关文章

  1. windows PAE扩展和AWE编程

    在32位windows上只能看到最大3GB的内存空间,而且每个应用程序只能访问4GB的的内存,这个限制是windows独有的,为了使程序能够访问大于4GB的内存空间,需要使用AWE编程接口,同时需要开 ...

  2. 如何打开Windows Server 2003 内存寻址扩展

    本文介绍了如何在系统内存大于4G的情况下,让windows2003 Advanced Server支持大内存的方法: 由于Windows2003 32bit是32位操作系统,当服务器配备内存高达4G时 ...

  3. 【转载】64 位 Windows 内核虚拟地址空间布局(基于 X64 CPU)

    原文链接:http://shayi1983.blog.51cto.com/4681835/1734822 本文为原创翻译,原文出处为 http://www.codemachine.com/articl ...

  4. 关于32位windows与4GB内存的那些事儿

    参考:1 Physical Address Extensionzh.wikipedia.org/wiki/PAEen.wikipedia.org/wiki/Physical_Address_Exten ...

  5. [百度空间] [转]将程序移植到64位Windows

    from : http://goooder.bokee.com/2000373.html (雷立辉 整理) 简介:本文对如何将32位Windows程序平滑的支持和过渡到64位Windows操作系统做出 ...

  6. Windows内存管理[转]

    本文主要内容:1.基本概念:物理内存.虚拟内存:物理地址.虚拟地址.逻辑地址:页目录,页表2.Windows内存管理3.CPU段式内存管理4.CPU页式内存管理 一.基本概念1. 两个内存概念物理内存 ...

  7. windows虚拟内存管理

    内存管理是操作系统非常重要的部分,处理器每一次的升级都会给内存管理方式带来巨大的变化,向早期的8086cpu的分段式管理,到后来的80x86 系列的32位cpu推出的保护模式和段页式管理.在应用程序中 ...

  8. Linux内存寻址之分段机制及分页机制【转】

    前言 本文涉及的硬件平台是X86,如果是其他平台的话,如ARM,是会使用到MMU,但是没有使用到分段机制: 最近在学习Linux内核,读到<深入理解Linux内核>的内存寻址一章.原本以为 ...

  9. Windows内存放血篇,突破物理内存的CopyOnWrite

      本篇以x86(开启PAE) 以及x64 Win7系统 不借助微软API突破内存的写拷贝机制进行讲述 https://bbs.pediy.com/thread-222949.htm   0x01 B ...

随机推荐

  1. android开发系列之代码整洁之道

    说起代码整洁之道,想必大家想到更多的是那本经典重构书籍.没错,记得当时自己读那本书的时候,一边结合项目实战,一边结合书中的讲解,确实学到了很多东西,对我自己的编码风格影响极深.随着时间的流逝,书中很多 ...

  2. Java检测文件是否UTF8编码

    介绍UTF-8编码规则 UTF-8 编码字符理论上可以最多到 6 个字节长, 然而 16 位 BMP 字符最多只用到 3 字节长. Bigendian UCS-4 字节串的排列顺序是预定的. 字节 0 ...

  3. 对 Linux 新手非常有用的20个命令

    你打算从Windows换到Linux上来,还是你刚好换到Linux上来?哎哟!!!我说什么呢,是什么原因你就出现我的世界里了.从我以往的经验来说,当我刚使用Linux,命令,终端啊什么的,吓了我一跳. ...

  4. SQLite之读取数据库内容

    1.打开已有数据库. //打开数据库 - (BOOL )openDB {// 红色部分修改为自己的数据库路径 return (SQLITE_OK == sqlite3_open([@"/Us ...

  5. 海蜘蛛ISPV6.1.5,目前破解版本中最稳定的!

    海蜘蛛ISPV6.1.5,目前破解版本中最稳定的! 破解步骤如下: 一.安装完毕进控制台 二.使用muddyboot登陆 密码(123456) 三.输入root回车 四.输入regtools回车 五. ...

  6. 条款3:尽可能地使用const

    如下为const修饰的几种类型: char name[] = "benxintuzi"; char* p1 = name;                // non-const ...

  7. Android实现入门界面布局

    Android实现入门界面布局 开发工具:Andorid Studio 1.3 运行环境:Android 4.4 KitKat 代码实现 首先是常量的定义,安卓中固定字符串应该定义在常量中. stri ...

  8. [网络配置相关]——netstat命令

    netstat:显示网络状态信息 -a   显示所有连接状态的网络的所有选项-l    仅显示LISTEN状态的连接-n   直接显示IP地址,而不通过域名服务器-p   把进程名和进程PID也显示出 ...

  9. Java内部实现的观察者模式小记

    假如Admin要观察User的工资变化,当User的工资增加或者减少时,都会引起Admin输出相应的信息. 定义观察者接口:MyObserver.java package cn.liuning.wat ...

  10. Android -- PowerManager和PowerManager.WakeLock

    PowerManager.WakeLock                                                       PowerManager.WakerLock是我 ...