Advanced Debugging
About AdvDbg Consult Train Services Products Tools Community Contact  
欢迎光临 高端调试 登录 | 注册 | FAQ
 
  ACPI调试
Linux内核调试
Windows内核调试
 
  调试战役
调试原理
新工具观察
 
  Linux
Windows Vista
Windows
 
  Linux驱动
WDF
WDM
 
  PCI Express
PCI/PCI-X
USB
无线通信协议
 
  64位CPU
ARM
IA-32
  CPU Info Center
 
  ACPI标准
系统认证
Desktop
服务器
 
  Embedded Linux
嵌入式开发工具
VxWorks
WinCE
嵌入式Windows
 
  格蠹调试套件(GDK)
  格蠹学院
  小朱书店
  老雷的微博
  《软件调试》
  《格蠹汇编》
  《软件调试(第二版)》
沪ICP备11027180号-1

Windows内核调试

帖子发起人: ezasm   发起时间: 2009-03-13 01:09 上午   回复: 4

Print Search
帖子排序:    
   2009-03-13, 01:09 上午
ezasm 离线,最后访问时间: 2009/3/13 1:08:20 ezasm

发帖数前500位
注册: 2009-03-13
发 贴: 3
求助,搜索ntoskrnl内存,遇到问题
Reply Quote
DriverEntry里搜索地址范围位于base和base+size之间内存,引起崩溃
加MmIsAddressValid()判断后,该函数返回false,
但是硬编码这个地址的函数,是可以直接调用执行的,不会出错,
这样的话似乎有些矛盾了,既然这里的内存可以执行,说明代码在内存中,或者被交换出去了,总之应该是可以读取和执行的,因为DriverEntry是运行在PASSIVE_LEVEL的.
既然这样,为什么搜索读取会蓝呢?
另外不同机器上,情况不同,虚拟机一般不会有这样的地址,测试了几个机器,出问题的地址都不尽相同.同样的系统,相同大小内存,不同cpu,出问题地方都不同
IP 地址: 已记录   报告
   2009-03-13, 09:26 上午
WANGyu 离线,最后访问时间: 2012/9/10 3:34:00 王宇

发帖数前10位
男
注册: 2007-05-08
发 贴: 306
Re: 求助,搜索ntoskrnl内存,遇到问题
Reply Quote
猜测原因是没有意义的,还是分析dump吧。
IP 地址: 已记录   报告
   2009-03-13, 12:43 下午
ezasm 离线,最后访问时间: 2009/3/13 1:08:20 ezasm

发帖数前500位
注册: 2009-03-13
发 贴: 3
Re: 求助,搜索ntoskrnl内存,遇到问题
Reply Quote
找到原因了,当某地址内存被交换出去以后MmIsAddressValid返回false,但怎么判断内存是否真的有效呢(1.已被映射到物理内存并且未被交换,2.已被映射但交换出去了,这两种情况至少有一个为true)
IP 地址: 已记录   报告
   2009-03-13, 14:37 下午
WANGyu 离线,最后访问时间: 2012/9/10 3:34:00 王宇

发帖数前10位
男
注册: 2007-05-08
发 贴: 306
Re: 求助,搜索ntoskrnl内存,遇到问题
Reply Quote
还是没太看懂楼主描述的问题...

MmIsAddressValid 其实就是判断PDE/PTE Present 位的有效性:
PointerPte->u.Hard.Valid
#define MI_PDE_MAPS_LARGE_PAGE(PDE) ((PDE)->u.Hard.LargePage == 1)

在 dispatch 及以上级别引发页错误肯定蓝屏
IP 地址: 已记录   报告
   2009-03-13, 15:09 下午
ezasm 离线,最后访问时间: 2009/3/13 1:08:20 ezasm

发帖数前500位
注册: 2009-03-13
发 贴: 3
Re: 求助,搜索ntoskrnl内存,遇到问题
Reply Quote
谢谢王老师的解答,我对MmIsAddressValid 的理解有错误,我错误的认为如果该页已经映射,但被交换出去了,也返回true

之前崩溃的地址(addr1),不是我要找的地址(addr2),而是addr2前面的某个地址,addr1所在页还未被使用,所以读取导致蓝屏,
后来加了MmIsAddressValid做判断,当搜索到地址addr2时,由于缺页,函数返回了false,于是搜索代码跳过了,当我使用调试器去反汇编addr2时发现可以读取,所以造成了我的误解

再次感谢王老师的热情回复,调试才是王道
IP 地址: 已记录   报告
高端调试 » 软件调试 » Windows内核调试 » Re: 求助,搜索ntoskrnl内存,遇到问题

 
Legal Notice Privacy Statement Corporate Governance Corporate Governance
(C)2004-2020 ADVDBG.ORG All Rights Reserved.