阅读:2647回复:16
关于内存有效性验证的问题
lkd> u F9838A8F
f9838a8f ?? ??? ^ Memory access error in 'u F9838A8F' F9838A8F这个地址用MmIsAddressValid验证返回TRUE 这类地址如何进行读取前的验证呢? ![]() 请各位大牛指点,谢谢~ |
|
沙发#
发布于:2007-07-10 18:02
汗~没人知道么? 这种有地址,但一读取就蓝的地方咋整呢?
![]() |
|
板凳#
发布于:2007-07-10 21:55
获得其物理地址,然后重新影射到你自己的空间,锁定后访问。
|
|
|
地板#
发布于:2007-07-10 22:32
LockPages才可靠~~
![]() |
|
|
地下室#
发布于:2007-07-10 22:37
谢谢WOW,不过,我要的是对内存的有效性进行检验,如果无效就跳过这段内存了,并不是要读取里面的数据~~还有其它方法没?
![]() |
|
5楼#
发布于:2007-07-11 11:58
ProbeForRead/ProbeForWrite
|
|
|
6楼#
发布于:2007-07-11 16:06
谢谢WQXNETQIQI,我去试试~
![]() |
|
7楼#
发布于:2007-07-11 17:26
我查了一下资料,ProbeForRead/ProbeForWrite好像不能用于内核地址的验证啊?~实际试了一下儿也是立即蓝屏~
![]() |
|
8楼#
发布于:2007-07-12 10:11
1.把!pte address的结果贴上来
2.把蓝屏文件的!analyze -v的结果贴上来 |
|
9楼#
发布于:2007-07-12 11:01
lkd> dd fa8648ab
fa8648ab ???????? ???????? ???????? ???????? fa8648bb ???????? ???????? ???????? ???????? fa8648cb ???????? ???????? ???????? ???????? lkd> !pte fa8648ab VA fa8648ab PDE at C0300FA8 PTE at C03EA190 contains 0101A163 contains 00000000 pfn 101a -G-DA--KWEV ____________________________ 谢谢版主回复~~ 蓝屏只是在用ProbeForRead时蓝的屏~ 我的目的只是想知道这个地址是否有效可读的~ |
|
10楼#
发布于:2007-07-12 11:19
1.ProbeFroRead只适用于对于2g以下的用户态地址的有效性进行检查,而且外面要加try-except,不适合你这种情况
2.你的pte内容为0,MmIsAddressValid不应该为true,你确认MmIsAddressValid返回true? |
|
11楼#
发布于:2007-07-12 18:35
是的,我用MmIsAddressValid试过了,返回值是:C03EA100
|
|
12楼#
发布于:2007-07-12 20:30
MmIsAddressValid返回的boolean,你c03ea100是什么?如果看最低8位就是0,就是false.哪里来的true?
|
|
13楼#
发布于:2007-07-12 20:50
![]() ![]() ![]() ![]() 狂晕一把~~~ 原来如此~~~ 我用的是汇编,判断的是eax的寄存器值~~汗~~原来是要判断低8位~ 不知道还有哪些函数是判断低8位的~~晕死了~~~ ![]() |
|
14楼#
发布于:2007-07-12 20:51
万分感谢版主~~汗~~程序居然一直没怎么出问题~~我得改一改去~
![]() |
|
15楼#
发布于:2007-07-13 16:26
哎,亏你还用汇编写程序,犯那么低级的错误,真丢我们汇编一族的脸啊,嘿嘿......
![]() |
|
|
16楼#
发布于:2007-07-14 11:54
引用第15楼wowocock于2007-07-13 16:26发表的 : ![]() ![]() |
|