[转载]x86 vista 下的 paging

看一个实际的例子:

kd> u
nt!InitBootProcessor+0x3df:
81b3a6de fec8            dec     al
81b3a6e0 f6d8            neg     al
81b3a6e2 bfe0df8f81      mov     edi,offset nt!ExpBootEnvironmentInformation (818fdfe0)
81b3a6e7 1bc0            sbb     eax,eax
81b3a6e9 40              inc     eax
81b3a6ea 40              inc     eax
81b3a6eb a3f0df8f81      mov     dword ptr [nt!ExpBootEnvironmentInformation+0x10 (818fdff0)],eax
81b3a6f0 8b7358          mov     esi,dword ptr [ebx+58h]

上面是 windbg 调试 vista 内核中摘录的一段代码。

现在看一看 81b3a6de 这个 linear address 对应的物理地址是什么?

kd> r cr3
cr3=00122000

kd> r cr4
cr4=00000020

CR4.PAE = 1、CR4.PSE = 0
PAE 开启,是 2M page 还是 4K page,由 PDE 来决定

由 CR3 寄存器得出:PDPT 的基址是 0x00122000

kd> .formats 0x81b3a6de
Evaluate expression:
  Hex:     81b3a6de
  Decimal: -2118932770
  Octal:   20154723336
  Binary:  10000001 10110011 10100110 11011110

kd> !dq 0x122000+0x2*8
#  122010 00000000`00125001 00000000`00126001
#  122020 00000000`00000000 00000000`00000000
#  122030 00000000`00000000 00000000`00000000

PDT 的基地址是 0x125000,未使用 2M page,它是 4K pages

kd> !dq 0x125000+0xd*8
#  125068 00000000`00141063 00000000`00142063
#  125078 00000000`00143063 00000000`00144063
#  125088 00000000`00145063 00000000`03400963
#  125098 00000000`03401963 00000000`03402963
#  1250a8 00000000`03403963 00000000`03404963

PT 的基址是 0x00141000

kd> !dq 0x141000+0x13a*8
#  1419d0 00000000`01b3a163 00000000`01b3b163
#  1419e0 00000000`01b3c163 00000000`01b3d163
#  1419f0 00000000`01b3e163 00000000`01b3f163
#  141a00 00000000`01b40163 00000000`01b41163

page 的基址是 0x01b3a000,所以,最终 physical address 是:0x01b3a6de

kd> !db 0x01b3a6de
# 1b3a6de fe c8 f6 d8 bf e0 df 8f-81 1b c0 40 40 a3 f0 df [email protected]@...
# 1b3a6ee 8f 81 8b 73 58 83 c6 6c-a5 a5 a5 33 c0 40 a5 e8 [email protected]
# 1b3a6fe dd 7f cc ff 8b 43 58 83-38 7c 72 06 53 e8 b5 41 .....CX.8|r.S..A
# 1b3a70e ff ff 53 e8 ca 3e ff ff-a1 a8 15 93 81 a3 b4 02 ..S..>..........

kd> db 0x81b3a6de
81b3a6de  fe c8 f6 d8 bf e0 df 8f-81 1b c0 40 40 a3 f0 df  [email protected]@...
81b3a6ee  8f 81 8b 73 58 83 c6 6c-a5 a5 a5 33 c0 40 a5 e8  [email protected]
81b3a6fe  dd 7f cc ff 8b 43 58 83-38 7c 72 06 53 e8 b5 41  .....CX.8|r.S..A
81b3a70e  ff ff 53 e8 ca 3e ff ff-a1 a8 15 93 81 a3 b4 02  ..S..>..........

使用 0x01b3a6de 这个物理地址查看内容,和使用 0x81b3a6de 这个线性地址查看内容是完全一样的。

使用 windbg 的这种方式有助于理解 paging 过程

时间: 2024-11-11 11:47:26

[转载]x86 vista 下的 paging的相关文章

[转载] x86 winxp 下的 segmentation 实例

使用 bochs 可以很容易很直观地观察调试系统.下面选取一个 xp 启动的实际片断,如下: <bochs:7> sreg cs:s=0x001b, dl=0x0000ffff, dh=0x00cffa00, valid=1 ds:s=0x0023, dl=0x0000ffff, dl=0x00cff300, valid=31 ss:s=0x0023, dl=0x0000ffff, dl=0x00cff300, valid=31 ss:s=0x0023, dl=0x0000ffff, dl=0

Windows 7/Vista下安装Oracle Developer Suit遇到的几个问题

http://blog.csdn.net/pan_tian/article/details/8016318 Oracle Developer Suite (ODS) 10g是在Windows 7/Vista之前开发出来的,在Win7/Vista下安装的过程中一些的问题,常见的问题及解决方法如下:   问题1:Checking operating system version: must be 5.0, 5.1 or 5.2.    Actual 6.1 Win7/Vista下安装Form Bui

Error 56: The Cisco Systems, Inc. VPN Service has not been started(Cisco VPN在Vista下出现Error 56的解决办法)

Error 56: The Cisco Systems, Inc. VPN Service has not been started(Cisco VPN在Vista下出现Error 56的解决办法) 似乎,自从我的Vista自动升级安装了SP1后,我的Cisco VPN就出现问题了,根本就无法运行.总是提示Error 56: The Cisco Systems, Inc. VPN Service has not been started. Please start this service an

系统重装 VISTA下如何删除EISA分区

现在的品牌电脑大部分都有一键还原,把还原内容存储在EISA配置的隐藏分区里面,一般的软件都无法对其进行操作,保证分区及系统还原的安全性.这样的功能对于一些人不使用一键还原(笔者即是)来说实属鸡肋功能,且看着那若干容量的硬盘浪费在那里极为不爽. 在网上搜索了很久,大部分都是说要重新启动到DOS下才可以进行,对技能要就较高,经过笔者不懈努力,研究了若干Windows自带的工具后,终于找到一个工具:Diskpart.exe. 关于Diskpart命令:使用此实用工具可以从脚本.远程会话或其他命令提示符

vista下开机启动 简单绕过UAC的方法(自己使用runas参数重新启动自己,有点意思)

背景      vista下,如果不开启UAC,那就没有我下面要说的问题了,呵呵.下面说的都是在vista开启UAC的前提下说的,win7也适用.      在vista下,系统开启了UAC,如果你的软件通过manifest进行了提权(提升到管理员权限),那么exe上面会打上一个“小盾”的图标,这种程序启动的时候,会激活UAC保护机制,弹一个全局对话框出来询问用户是否允许启动,这就是微软标榜的灰常灰常的安全,到底安全不安全,先不讨论了,呵呵!现在一切都很和谐,没有问题,多点一下就多点下呗,但是如

[转载]window系统下TCP参数优化

注:此文转载自红黑联盟,最近服务器遇到周期性down掉的问题,拖了两三周请教了前辈之后才知道无关应用和数据库的事情,是tcp设置的问题.从网上找个这篇文章,解释的很不错.有兴趣请至红黑联盟翻阅原文. TCP连接的状态与关闭方式及其对Server与Client的影响 http://www.2cto.com/net/201304/206071.html 通常会采用修改注册表的方式改进Windows的系统参数.下面将为大家介绍Windows系统下的TCP参数优化方式,适用于Windows 2003.W

X86平台下用汇编写&quot;HelloWorld&quot;

首先需要安装一个汇编器,我用的是Nasm,这个汇编器在Linux下安装还是很简单的. Nasm下载地址http://www.nasm.us/pub/nasm/releasebuilds/ 在下载之后对其进行解压,然后进入到其目录下,会发现有configure文件,接下来相信对于熟悉Linux的同学就知道该怎么办了. 输入./configure然会待其执行完成后,会发现在目录下生成了一个Makefile文件,这是输入make命令,就可以完成对Nasm的编译了 然后进入root,输入make ins

转载:Ubuntu下deb包的安装方法

转载:Ubuntu下deb包的安装方法,http://blog.csdn.net/kevinhg/article/details/5934462 deb是debian linus的安装格式,跟red hat的rpm非常相似,最基本的安装命令是:dpkg -i file.deb dpkg 是Debian Package的简写,是为Debian 专门开发的套件管理系统,方便软件的安装.更新及移除.所有源自Debian的Linux发行版都使用dpkg,例如Ubuntu.Knoppix 等.以下是一些

转载:Linux下执行SVN命令时提示错误:Valid UTF-8 data

在Linux下执行svn add *时出现如下错误: svn:  Valid UTF-8  data(hex: 4b)followed by invalid UTF-8 sequence(hex:  fc 63 68  65) 出现这个错误是因为svn库里有文件的名字不是utf-8编码的,这种情况对于中文来说很常见.比如在自己的windows上建了一个中文名字的文件,就会使这种情况. 几经周折,才找到解决办法: 首先,执行命令: ls * | file -/dev/stdin:  ISO-885