驱动学习---PAE--virtual address to physics address
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的更多相关文章
- BCM wifi驱动学习
BCMwifi驱动学习 一.wifi详解1 1.代码路径:Z:\home\stonechen\svn\TD550_X\TD550\3rdparty\wifi\BCM43362\special\bcmd ...
- IIC驱动学习笔记,简单的TSC2007的IIC驱动编写,测试
IIC驱动学习笔记,简单的TSC2007的IIC驱动编写,测试 目的不是为了编写TSC2007驱动,是为了学习IIC驱动的编写,读一下TSC2007的ADC数据进行练习,, Linux主机驱动和外设驱 ...
- linux驱动学习(八) i2c驱动架构(史上最全) davinc dm368 i2c驱动分析【转】
转自:http://blog.csdn.net/ghostyu/article/details/8094049 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[-] 预备知识 lin ...
- linux 驱动学习笔记01--Linux 内核的编译
由于用的学习材料是<linux设备驱动开发详解(第二版)>,所以linux驱动学习笔记大部分文字描述来自于这本书,学习笔记系列用于自己学习理解的一种查阅和复习方式. #make confi ...
- Linux驱动学习步骤(转载)
1. 学会写简单的makefile 2. 编一应用程序,可以用makefile跑起来 3. 学会写驱动的makefile 4. 写一简单char驱动,makefile编译通过,可以insmod, ls ...
- own address as source address
1222.762730] br0: received packet on nbif0 with own address as source address[ 1222.769697] br0: rec ...
- linux驱动学习(二) Makefile高级【转】
转自:http://blog.csdn.net/ghostyu/article/details/6866863 版权声明:本文为博主原创文章,未经博主允许不得转载. 在我前一篇写的[ linux驱动学 ...
- 【Linux驱动学习】SD卡规范学习
摘要: 学习SD卡的相关规范,包括定义,硬件特性,数据传输,命令系统等.不涉及代码. 文章针对Linux驱动开发而写,以助于理解SD卡驱动,不会涉及过多硬件内容. 纲要: 1. SD卡介绍 2. SD ...
- linux驱动学习_1
目前项目需要,需要做linux驱动了,记录一下 学习驱动,大家一定都会写一个hello world代码,网上也有很多范例,但是记录一下遇到的问题. 1.make之后,使用insmod加载,终端没有打印 ...
随机推荐
- jquery 监听所有锚点链接实现平滑移动
jquery 监听所有锚点链接实现平滑移动,地址栏上不会改变链接地址 //监听所有锚点链接实现平滑移动 $('a[href*=#],area[href*=#]').click(function() { ...
- TensorFlow中与卷积核有关的各参数的意义
以自带models中mnist的convolutional.py为例: 1.filter要与输入数据类型相同(float32或float64),四个参数为`[filter_height, filter ...
- JS toFixed 四舍六入五成双
以前一直以为toFixed就是四舍五入的方法,后来又有一段时间以为toFixed是五舍六入.今天终于写的时候,终于才知道toFixed是一个叫做四舍六入无成双的诡异的方法... 完全不明白为什么要这么 ...
- Codeforces 732D [二分 ][贪心]
/* 不要低头,不要放弃,不要气馁,不要慌张 题意: n天进行m科考试,每科考试需要a的复习时间,n天每天最多可以考一科.并且指定哪天考哪科. 注意考试那天不能复习. 问最少需要多少天可全部通过考试. ...
- 利用Continuous Testing实现Eclipse环境自动单元测试
当你Eclipse环境中修改项目中的某个方法时,你可能由于各种原因没有运行单元测试,结果代码提交,悲剧就可能随之而来. 所幸infinitest(http://infinitest.github.io ...
- 最短路模板(Dijkstra & Dijkstra算法+堆优化 & bellman_ford & 单源最短路SPFA)
关于几个的区别和联系:http://www.cnblogs.com/zswbky/p/5432353.html d.每组的第一行是三个整数T,S和D,表示有T条路,和草儿家相邻的城市的有S个(草儿家到 ...
- 帝国cms 无法生成静态页
建立目录不成功!请检查目录权限 安装完了帝国网站管理系统(帝国CMS)之后,没有进行初始化内置数据的步骤,而引起的错误.其实只要你按照安装说明一步一步下来就不会出错. 解决办法:初始化内置数据 帝国c ...
- Android jar包的导出和使用
一.工程打成JAR包. 1. eclipse下有一工程JsnTxJar,右键工程名选择Export. 选择Java->JAR file 下图所示左边一栏只勾选src,右边一栏都不用勾 ...
- Nice Validator(Form验证)及Juery zTree控件
http://niceue.com/validator/demo/match.php http://www.ztree.me/v3/demo.php#_603
- VBA_Excel_教程:字典类型
VBA中的字典类型需要添加Microsoft Scripting Runtime引用,在Tools菜单下添加 Sub testDic() Dim strV As String Dim key As S ...