≡
导航
搜索
教程
插件
模型
模板
博客
交易
朋友
编程语言分享讨论总汇吧
已关注 | 取消
+关注
关注:
10
帖子:
1,222
签到
05月06日 尚未签到
看帖
图片
精品
视频
共有回帖数
0
个
来学习一下PAE分页
只看楼主
收藏
回复
花非花雾非雾
等级:
弄了个test.exe,main下第一句是__asm int 3以便断在windbg中。省的直接break落到idle进程中。
kd !process 0 0
PROCESS 81ed6778 SessionId: 0 Cid: 0578 Peb: 7ffdf000 ParentCid: 05b8
DirBase: 04040160 ObjectTable: e1df1da0 HandleCount: 7.
Image: test.exe
这就是我们进程了。81ed6779是EPROCESS所在处。DirBase放的是cr3的值,正是我们需要的。
kd r cr3
cr3=04040160
这是相等的。
随便挑一个地址看吧。就拿00401028来看
00401028 cc int 3
001b:00401029 6a08 push 8
001b:0040102b e800010000 call 00401130
所以对应00401028的物理地址一个双字应该是e8086acc(intel小尾)
看看00401028的二进制
kd .formats 00401028
Evaluate expression:
Hex: 00401028
Decimal: 4198440
Octal: 00020010050
Binary: 00000000 01000000 00010000 00101000
Chars: .@.(
Time: Wed Feb 18 22:14:00 1970
Float: low 5.88327e-039 high 0
Double: 2.0743e-317
cr3中存放的是PDPTE的物理地址,而虚拟地址前两位(31,30)表示PDPTE的索引。此时为00,即第0项。
查看此物理地址
kd !dd 04040160
# 4040160 0e1f1001 00000000 0e0f2001 00000000
# 4040170 0df33001 00000000 0e070001 00000000
第0项即000000000e1f1001。
虚拟地址之后9位(29 — 21)是PDE索引,此时为000000 010,即第2项。
kd !dd 0e1f1000
# e1f1000 0dfc2067 00000000 0e38d067 00000000
# e1f1010 0e241067 00000000 00000000 00000000
# e1f1020 00000000 00000000 00000000 00000000
# e1f1030 00000000 00000000 00000000 00000000
# e1f1040 00000000 00000000 00000000 00000000
# e1f1050 00000000 00000000 00000000 00000000
# e1f1060 00000000 00000000 00000000 00000000
# e1f1070 00000000 00000000 00000000 00000000
第2项即000000000e241067
后后12位为标志位,第7位说明是要映射一个2mb的页还是存放所对应的PTE的物理地址
此时,067 = 000001100111,第7位为0,说明存放对应PTE的物理地址
再之后9(20 - 12)位是PTE索引,此时为00000 0001,即第1项。PTE中存放的就是物理页的基址了。
kd !dd 0e241000
# e241000 0e1ef025 80000000 0e26a025 00000000
# e241010 0e36b025 00000000 0e09b025 00000000
# e241020 0e15c025 00000000 0e05d025 00000000
# e241030 00000000 00000000 00000000 00000000
# e241040 0df60025 00000000 0de21025 00000000
# e241050 0e062025 00000000 0e1f7025 00000000
# e241060 0e2af025 00000000 00000000 00000000
# e241070 00000000 00000000 00000000 00000000
第1项即000000000e26a025,物理页基址就是0e26a000
虚拟地址还余下12位(11 - 0),即物理页面中的偏移,此时是0000 00101000,即0x28
kd !dd 0e26a000
# e26a000 cccccccc 0006e9cc cccc0000 cccccccc
# e26a010 83ec8b55 56534cec b47d8d57 000013b9
# e26a020 ccccb800 abf3cccc e8086acc 00000100
# e26a030 8904c483 45c7fc45 000100f4 f845c700
# e26a040 00000101 c7fc458b 00010000 fc4d8b00
# e26a050 010441c7 8b000001 8b52f855 6850f445
# e26a060 00422f5c 000047e8 0cc48300 8bfc4d8b
# e26a070 8b520451 1c685001 e8004220 00000030
偏移28处为e8086acc,与我们看到的相同。
总之,PAE除了使用3级映射,其他与与普通的32-bit paging(使用2级映射)大同小异。
楼主 2015-11-26 14:22
回复
共有回帖数
0
个
回 帖
表情
图片
视频
欢迎来到本吧,您可以在此发帖和众多大咖交流学习.
选择或直接输入昵称
Tips:支持QQ截图直接粘贴
发表
登录直线网账号
自动登录
忘记密码
免费注册
本吧信息
查看详情
吧主:
禾木
本吧公告
好好学习,天天向上!
我常逛的吧
我管理的吧
Copyright © 2010~2015 直线网 版权所有,All Rights Reserved.沪ICP备10039589号
意见反馈
|
关于直线
|
版权声明
|
会员须知