PAE是Physical Address Extension的缩写,即物理地址扩展。简单来说,就是把IA-32处理器的寻址能力从原来的4GB扩展到64GB。寻址4GB空间,要求物理地址的宽度为32位。类似的,要寻址64GB空间,那么物理地址的宽度就是36位。因为这个原因,PAE又被称为PAE-36bit。

一般电脑都可以轻松看出是不是使用了PAE,最简单是看系统属性:

如果不启用PAE机制,每个进程的DirBase
的低12位应该是0,启用PAE机制低5位是0。在lkd模式下,!pte显示是不正确的

以下是PAE启用的显示:

以下为示例:

代码:

char *g_test = "123456789";

int main()
{
printf(g_test);

1.找到g_test的地址

00498004 test!g_test = 0x00486c6c "123456789"

2.启用内核调试,观察test进程:

上面标红的即为CR3的值,即PDPTR的内容

我们再查看下虚拟地址分解:

==》

最高两位是页目录表指针表的索引(00)

接下来9位是页目录索引即2

接下来9位为页表索引即0x86

最后12位是页内偏移为0Xc6c

可以这样理解,三张表:

页目录指针表-->页目录表基地址

页目录表-->页表基地址

页表+页内偏移即为物理地址

3.首先通过02b40320观察指针表,因为是物理地址,所以用!dq

kd> !dq 02b40320
# 2b40320 00000000`0313a801 00000000`1fdfb801
# 2b40330 00000000`1fc3c801 00000000`03579801
# 2b40340 00000000`10c5e801 00000000`10bdf801
# 2b40350 00000000`10ce0801 00000000`10d5d801
# 2b40360 00000000`111bb801 00000000`1123c801
# 2b40370 00000000`1143d801 00000000`1137a801
# 2b40380 00000000`115dd801 00000000`1151e801
# 2b40390 00000000`1145f801 00000000`1165c801

每个指针对共有4个表项,每个表项是8字节(64位),上面2分析为0号表项,即00000000`0313a801

4.把00000000`0313a801砍去低12位,高32位,就是页目录表的基地址为0313a000,观察它的第2项:

kd> !dq 313a000+8*2
# 313a010 00000000`03425867 00000000`00000000

5.把00000000`03425867砍去低12位,高32位,就是页表基地址为:03425000,观察它的0x86项:

kd> !dq 03425000+0x86*8
# 3425430 00000000`03f80025 00000000`03301025
# 3425440 00000000`00000000 00000000`00000000
# 3425450 00000000`1fc2e025 00000000`00000000
# 3425460 00000000`00000000 00000000`00000000
# 3425470 00000000`00000000 00000000`00000000
# 3425480 00000000`031b7025 00000000`00000000
# 3425490 00000000`00000000 00000000`00000000
# 34254a0 00000000`00000000 00000000`0362c025

6.把00000000`03f80025砍去低12位,高32位,即内存页基地址为03f8000,加上页内偏移c6c:

下面再发张全图加深下理解:

注意PAE是扩展,所以都是64位的:

驱动学习---PAE--virtual address to physics address的更多相关文章

  1. BCM wifi驱动学习

    BCMwifi驱动学习 一.wifi详解1 1.代码路径:Z:\home\stonechen\svn\TD550_X\TD550\3rdparty\wifi\BCM43362\special\bcmd ...

  2. IIC驱动学习笔记,简单的TSC2007的IIC驱动编写,测试

    IIC驱动学习笔记,简单的TSC2007的IIC驱动编写,测试 目的不是为了编写TSC2007驱动,是为了学习IIC驱动的编写,读一下TSC2007的ADC数据进行练习,, Linux主机驱动和外设驱 ...

  3. linux驱动学习(八) i2c驱动架构(史上最全) davinc dm368 i2c驱动分析【转】

    转自:http://blog.csdn.net/ghostyu/article/details/8094049 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[-] 预备知识 lin ...

  4. linux 驱动学习笔记01--Linux 内核的编译

    由于用的学习材料是<linux设备驱动开发详解(第二版)>,所以linux驱动学习笔记大部分文字描述来自于这本书,学习笔记系列用于自己学习理解的一种查阅和复习方式. #make confi ...

  5. Linux驱动学习步骤(转载)

    1. 学会写简单的makefile 2. 编一应用程序,可以用makefile跑起来 3. 学会写驱动的makefile 4. 写一简单char驱动,makefile编译通过,可以insmod, ls ...

  6. own address as source address

    1222.762730] br0: received packet on nbif0 with own address as source address[ 1222.769697] br0: rec ...

  7. linux驱动学习(二) Makefile高级【转】

    转自:http://blog.csdn.net/ghostyu/article/details/6866863 版权声明:本文为博主原创文章,未经博主允许不得转载. 在我前一篇写的[ linux驱动学 ...

  8. 【Linux驱动学习】SD卡规范学习

    摘要: 学习SD卡的相关规范,包括定义,硬件特性,数据传输,命令系统等.不涉及代码. 文章针对Linux驱动开发而写,以助于理解SD卡驱动,不会涉及过多硬件内容. 纲要: 1. SD卡介绍 2. SD ...

  9. linux驱动学习_1

    目前项目需要,需要做linux驱动了,记录一下 学习驱动,大家一定都会写一个hello world代码,网上也有很多范例,但是记录一下遇到的问题. 1.make之后,使用insmod加载,终端没有打印 ...

随机推荐

  1. not子查询中有null值的时候 not in 会失效

    not in子查询中有null值的时候 not in 会失效 但是 in 的子查询中有null的 不会失效

  2. Unity关于一个UGUI优化效率的方法

    无意间发现了一个小技巧.如下图所示,可以发现UGUI的Image组件的RaycastTarget勾选以后会消耗一些效率,为了节省效率就不要勾选它了,不仅Image组件Text组件也有这样的问题. 一般 ...

  3. pip/easy_install failure: failed to create process

    使用pip install requests安装requests, 报错: failed to create process 解决方法: 执行Python -m pip install --upgra ...

  4. (链接)打印相关_.NET打印小资料

    掌握.NET中的日常打印:包括各个类的参数等 http://blog.csdn.net/dzweather/article/details/10171105 设置纸张大小 PrintDocument ...

  5. 【转】HTML5 jQuery图片上传前预览

    hTML5实现表单内的上传文件框,上传前预览图片,针刷新预览images,本例子主要是使用HTML5 的File API,建立一個可存取到该 file的url,一个空的img标签,ID为img0,把选 ...

  6. IOS 设置导航栏全局样式

    // 1.设置导航栏背景 UINavigationBar *bar = [UINavigationBar appearance]; [bar setBackgroundImage:[UIImage r ...

  7. upgrade to ubuntu14.04, ibus input

    升级后ibus拼音输入很奇怪,可能和其他输入法产生混淆.解决很简单,只要打开终端输入 ibus-daemon -drx 不用重启或者登出问题便解决.

  8. Mvc public virtual DbQuery<TResult> Include("")

    参数 path 类型:System.String要在查询结果中返回的相关对象列表(以点号分隔). 返回值 类型:System.Data.Entity.Infrastructure.DbQuery< ...

  9. selenium 介绍1

    本文主要是吸收这些帖子的营养,多谢互联网,和未知名作者. http://www.ltesting.net/ceshi/open/kygncsgj/selenium/2011/1009/203318.h ...

  10. SetTimer 与 回调函数

    在控制台应用程序中,SetTimer的函数原型为: UINT_PTR SetTimer( HWND hWnd, // handle to window UINT_PTR nIDEvent, // ti ...