首页
社区
课程
招聘
[求助]修改PTE,PDE的问题
发表于: 2010-4-11 11:00 6651

[求助]修改PTE,PDE的问题

2010-4-11 11:00
6651
各位兄弟请帮忙看看,这是我在一段驱动中使用的代码,其中pMem=0X7c80ae30,即GetProcAddress的虚拟地址,通过以下代码分别获取到了PDE和PTE的地址,然而用MmIsAddressValid后的返回值却为0。
ulPDE = (((ULONG)pMem)>>22)*4+0xC0300000;
ulPTE = (((ULONG)pMem)>>12)*4+0xC0000000 ;
bPDE = MmIsAddressValid((PVOID)ulPDE);
bPTE = MmIsAddressValid((PVOID)ulPTE);
DbgPrint("MmIsAddressValid return value is %d PDE Address is 0X%08X ,it's value is 0X%08X\n", bPDE, ulPDE, *(PULONG)ulPDE);
DbgPrint("MmIsAddressValid return value is %d PTE Address is 0X%08X ,it's value is 0X%08X\n", bPTE, ulPTE, *(PULONG)ulPTE);
为什么???
我是想修改PTE的值,但以上的代码得出的地址用MmIsAddressValid调用返回值为0,高手帮忙,感激不仅

[课程]Android-CTF解题方法汇总!

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 175
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
自己先顶一个。
2010-4-11 17:28
0
雪    币: 75
活跃值: (623)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
3
计算公式有点问题,confused:
还要注意下你系统的分页模式,是非PAE还是PAE
它是非PAE分页模式.从代码中得出PDE,PTE的计算公式为:
PDE = ((VA >> 22) << 2 ) & 0xffc + 0xc0300000;
PTE = ((VA >> 12) << 2 ) & 0x3FFFFC + 0xc0000000;
现在PAE模式,PDE,PTE地址的计算公式是:
int   PDE = ((lVirtualAddress>>21)<<3) & 0x3FF8 + 0xC0600000;
int   PTE = ((lVirtualAddress>>12)<<3) & 0x7FFFF8 + 0xC0000000;
详见http://bbs.pediy.com/showthread.php?t=61327
2010-4-11 17:51
0
雪    币: 175
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
我已经自己解决了。这是NON  PAE模式的另一种计算公式,是正确的。当时我考虑了PAE的。只是代码中出了些问题。不过还是谢谢楼上的兄弟。
2010-4-12 10:11
0
游客
登录 | 注册 方可回帖
返回
//