驱动学习---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加载,终端没有打印 ...
随机推荐
- IOS开发 strong,weak,retain,assign,copy nomatic 等的区别与作用
strong,weak,retain,assign,copy nomatic 等的区别 copy与retain:1.copy其实是建立了一个相同的对象,而retain不是:2.copy是内容拷贝,re ...
- json格式的日期格式化
function formatterdate(val) { if (val != null) { var re = /-?\d+/; var m = re.exec(val); var date = ...
- [C#常用代码]类库中读取解决方案web.Config字符串
对于类库里读取解决方案web.config文件里字符串的方法一.读取键值对的方法:1.添加引用using System.Configuration;2.web.Config配置节<appSett ...
- Django RedirectView
RedirectView作用是重定向一个指定,给定的Url.这个给定的Url可能包含有字典风格的字符串,因为关键字(词)会被改变,所以从这个Url中捕获的参数可能也会被修改,例如,Url中的“%”应该 ...
- mac-android-虚机加速
mac下进行android编程不可避免会碰到android虚拟机问题,macbook pro启动虚机时报错: Starting emulator for AVD 'NEW' emulator: ERR ...
- UDP/TCP
转载地址http://blog.csdn.net/wwmusic/article/details/8875748 Socket 是一套建立在TCP/IP协议上的接口不是一个协议 应用层: HTTP ...
- SQL Server performance tips
Refer to: http://harriyott.com/2006/01/sql-server-performance-tips A colleague of mine has been look ...
- Xilinx DCM 使用---- 输出频率问题
最近在使用Xilinx FPGA验证项目,使用DCM将50M晶振分频得到20M时钟.但是下载代码到板子上验证,发现板子完全不工作. 然后 测量时钟,发现根本就没有20M时钟.查找资料,以及跟以前项目对 ...
- Javascript猜数字游戏
<!DOCTYPE html> <html> <head> <title></title> <meta charset="u ...
- .NET程序集的编译目标平台:X86 &AnyCPU &X64
在我们测试平台上发布客户端组件,经常会碰到因为build的版本是x86还是anycpu而引起的application error的问题.借此,研究了一下X86,X64,AnyCPU的区别. 使用.ne ...