能力值:
( LV12,RANK:420 )
2 楼
。。。。。。没有
能力值:
( LV3,RANK:20 )
3 楼
额........
if(MmIsAddressValid(va))
{
*(PCHAR)va = 0;
}
这种代码是不是会蓝的.....
加上__try是不是也会蓝?
unless the memory has been locked down or the address is a valid nonpaged pool address
这个会不会是解决办法呢.
能力值:
( LV2,RANK:10 )
4 楼
MJ回答好干脆。。。有莫有什么好的方法莫有?
能力值:
( LV3,RANK:20 )
5 楼
是的啊.有米有好办法.
能力值:
( LV3,RANK:20 )
6 楼
http://hi.baidu.com/mj0011/blog/item/54bba21c069b0d8c86d6b676.html
MJ在这里有透露,可惜有点不懂...
能力值:
( LV3,RANK:20 )
7 楼
偶去hook KeBugCheckEx试试.
能力值:
( LV3,RANK:20 )
8 楼
抄mj的:
ZwQuerySystemInformation, 0,得到phyrange = physicalpage*pagesize,
physical = MmGetPhysicalAddress(virtualaddress)
if(physicalzddress > phyrange)
invalid
virtualaddress = MmGetVirtualAddress(physical); // 这个还要改回来?能不能直接用上边的virtualaddress啊?
能力值:
( LV12,RANK:420 )
9 楼
没有100% OK的方法。
能力值:
( LV3,RANK:20 )
10 楼
继续谷歌...
能力值:
( LV2,RANK:10 )
11 楼
贴一段以前zzzevazzz大牛的话(原帖忘了 找不到了), 顺便请路过的各位鉴定下。
ps 下面的那几个函数2k下貌似没。
21
zzzevazzz 2009-04-07 22:10 | 回复
MmProbeAndLockPages肯定不行。对于分页地址,MmIsAddressValid也没用。
我以前也想过这个问题,最后我发现,WinDbg读内存不会引起系统崩溃,不管你读哪个位置,最多也就是返回一堆问号而已。
反汇编NtSystemDebugControl可以知道,系统用的是MmDbgCopyMemory,再继续反汇编,发现其中的MiDbgWriteCheck和MiDbgReleaseAddress用到了invlpg指令。恕我孤陋寡闻,不知道这是不是用来解决joanna所说的TLB corruption问题。
不过,即使有汇编代码,我还是没搞懂MmDbgCopyMemory到底是怎么保证读分页内存安全的。还是说其实根本就不读分页内存。那调试器是如何做到的呢? 22
zzzevazzz 2009-04-07 22:49 | 回复
实际上,调试器把内核访问违例这个异常处理掉,就像处理用户态内存地址一样,这样就不会BugCheck,于是所有的地址都直接读也没关系了。
能力值:
( LV12,RANK:420 )
12 楼
invlpg是解决不了TLB污染问题的吧。
所以说调试器本身也不行,例如你可以挂上调试器,u一下一些万年不会调用的API,例如CmRegisterCallback,或者NTFS中对FSCTL_MASK_AS_SYSTEM_HIVE的处理代码,基本都是显示无效的。
能力值:
( LV2,RANK:10 )
13 楼
不是没有,现成的函数没有。得靠你自己编
能力值:
( LV3,RANK:20 )
14 楼
感觉有点接近答案了.
能力值:
( LV3,RANK:20 )
15 楼
透露下方法哪~~~~给个思路~~~
能力值:
( LV2,RANK:10 )
16 楼
没有现成的,可以看看缺页中断处理代码,里面有查找磁盘页面的代码