首页
社区
课程
招聘
[旧帖] [求助]进程的页目录地址 0.00雪花
发表于: 2010-11-3 13:54 1434

[旧帖] [求助]进程的页目录地址 0.00雪花

2010-11-3 13:54
1434
刚才看到一个宏
MiAddressToPde

#define MiAddressToPde(x) \
    ((PMMPTE)(((((ULONG)(x)) >> 22) << 2) + PAGEDIRECTORY_MAP))

根据某个虚拟地址。计算出该地址所对应的页目录偏移

有2点不清楚

1 (ULONG)(x)) >> 22) << 2)

把虚拟地址右移22位好理解。找到了该虚拟地址在页目录的偏移。为啥还要左移两位呢?(貌似没什么用处)其后与地址PAGEDIRECTORY_MAP 相加。

2 通过PAGEDIRECTORY_MAP 来看。

貌似所有进程的页目录地址都是一样的吧。都是PAGEDIRECTORY_MAP 的值。

我的推断对吗???

谢谢!

[课程]FART 脱壳王!加量不加价!FART作者讲授!

收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 75
活跃值: (623)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
2
1 一个目录项是4个字节,所以,它左移了2位,实际上是计算此目录项的偏移
2 是这样的
2010-11-3 14:55
0
雪    币: 46
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
假设一个虚拟地址 11111111112222222222333333333333

左移动了22位就是111111111了。所以该地址在页目录中的偏移就是1111111111啊。
为啥要右移2位呢?

还是没懂
2010-11-3 15:04
0
雪    币: 163
活跃值: (75)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
4
左移两位相当于*4,应该是个页表的基址*4再加上偏移量吧
2010-11-3 16:31
0
雪    币: 392
活跃值: (89)
能力值: ( LV9,RANK:280 )
在线值:
发帖
回帖
粉丝
5
从CR3->PDE->PTE->ADDR的转换就不说啦,相信你自己也知道;

(ULONG)(x)) >> 22) 右移22位,取到了PDE的偏移offset,通过这个偏移可以定位到页表的地址。

那么,现在取页表的地址是: CR3+ offset*4 = 页表地址
4也就是PDE每一项的大小,类似于数组寻址,用位操作就是左移2位了。
呵呵~~能明白吧
2010-11-3 16:45
0
雪    币: 46
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
明白了!

我原以为1111111111左移2位成了111111111100  +CR3以后,后两位加没加一样呢 :(

现在清楚了。后边的不是逻辑运算,而是要取值的
2010-11-3 17:27
0
雪    币: 21
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
路过,学习学习!
2010-11-3 18:20
0
雪    币: 23
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
一起学习
2010-11-3 22:27
0
游客
登录 | 注册 方可回帖
返回
//