能力值:
( LV4,RANK:50 )
|
-
-
2 楼
等的好累啊
继续等
希望大牛出现
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
计算 PPDE 的算法不对 你用的应该是简化掉不支持PAE的算法
这一句 仅相当于and一下 不会出问题的
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
首先你要确认传入的pPde是否正确,其次不能对nt模块和hal模块所在内存页的P位设0
因为nt模块和hal模块都是大内存分页
|
能力值:
( LV4,RANK:50 )
|
-
-
5 楼
感谢whipk回复
我调试pPde是正确的
whipk所说 “不能对nt模块和hal模块所在内存页的P位设0 因为nt模块和hal模块都是大内存分页”为什么大分页内存不可以呢? 原因何在仅仅是大页么?还是某些其他引起cpu的错误?
and dword ptr [eax], 0xFFFFFFFE 修改内存的时候 cpu会检测到什么吗?
请前辈指点
|
能力值:
( LV4,RANK:50 )
|
-
-
6 楼
回loqich兄
ppde的地址是对的,我单步跟着看的
是的我的环境是单核 非PAE环境下的
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
你下载的是一个od插件源码吧,我以前测试单核非PAE下是没问题的
你看这个代码 里面好像记得有类似的东西
http://bbs.pediy.com/showthread.php?t=154384
|
能力值:
( LV4,RANK:50 )
|
-
-
8 楼
回whipk兄
我清除其他大页的P位没事。。。 为什么nt的不可以呢,此时我也未引用其数据和代码啊,即便引用了此时tlb也应该在cpu里了,不是么,还请前辈指点缘由
|
能力值:
( LV4,RANK:50 )
|
-
-
9 楼
回loqich兄
不是od插件,是自己的驱动里操作的
|
能力值:
( LV4,RANK:50 )
|
-
-
10 楼
周末继续苦等, 不弄明白 不吃饭了
|
能力值:
( LV2,RANK:10 )
|
-
-
11 楼
nt和hal模块是系统内最底层的东西的,无时无刻都有其代码运行中
一旦nt模块所在内存页的P位为0,等于整个内核突然从电脑系统中消失,如果你开调试器观察的话,会发现内核空间内的所有指令都变为??
Intel的官方手册明确规定软件系统(windows, linux)不能依赖和假设tlb机制,tlb缓存的产生和消亡对于软件系统来说只是有限可控的,tlb缓存中不一定有nt或hal模块的tlb entry,内核运行指令运行时一旦产生缺页异常,这时连idt表找不到了
and dword ptr [eax], 0xFFFFFFFE导致cpu重启的情况,我只在将nt模块所在的内存页p位设为0时遇到过。
除此之外都很正常,我建议你自己申请一块内块,然后对那块内存mark page not present试试。
|
能力值:
( LV4,RANK:50 )
|
-
-
12 楼
whipk兄 感谢回复
确实,如您所说,我测试其他非nt大页的都没有关系.
但是没有完全弄明白: 当前代码运行于我的驱动模块内,其所在pde固然不是nt的pde,执行"and dword ptr [eax], 0xFFFFFFFE"句时,仅仅是对内存做了个赋值操作,此时不论(nt所在大页)tlb是否存在,个人认为应该不影响当前的执行环境,因为没有引用其代码和数据,如果说等到引用到相应的nt代码或数据重启还可以理解,而且此时应该不影响原来的nt的tlb呢
个人理解,还请多拍砖
|
能力值:
( LV2,RANK:10 )
|
-
-
13 楼
为什么你要对pde的p位设0呢?除非目标线性地址确实是在大内存分页内
普通的驱动如程序如果不在注册表中指定加载为大内存分页,那么就是4K的内存页了
普通4K分页下1个pde下面有1024个pte,一旦对pde p位设0后,就等于1024个pte都失效
你的缺页异常处理程序应该在你的驱动程序地址空间内吧?缺页异常处理程序所在的内存页P位不能为0
如果p位为0的时候一旦其它地方产生缺页异常,cpu搜索idt表0xE向量号时,会因为找不到缺页异常处理程序,产生一个双重错误异常,进而系统蓝屏
|
能力值:
( LV4,RANK:50 )
|
-
-
14 楼
回复whipk兄
是的,正如whipk所言,缺页异常在我的驱动中呢,而且是设置好了之后再操作的pde
我真希望它蓝屏啊,可是没有蓝屏,没有dump看,只是cpu重启呢,所以很郁闷~
|
能力值:
( LV4,RANK:50 )
|
-
-
15 楼
请各位壮士`豪杰指教
|
|
|