|
|
|
|
|
|
|
Windows内核调试
帖子发起人: 特来劲同学 发起时间: 2012-09-07 17:36 下午 回复: 13
|
帖子排序:
|
|
|
|
2012-09-07, 17:36 下午
|
特来劲同学
注册: 2009-08-28
发 贴: 37
|
冰天雪地 7200。C 旋转 等待 张老师和其他前辈指点 手工修改pde重启
|
|
|
|
void MarkPdeNotPresent( PPDE pPde ) { __asm { mov eax, pPde and dword ptr [eax], 0xFFFFFFFE //mark the pde not present }
} 内核做拦截页错误处理,hook后驱动中自己修改pde,在执行到这一句时and dword ptr [eax], 0xFFFFFFFE,cpu重启,没有蓝屏(所以也没有dump分析) 不知道什么原因,请前辈们指点一二,感激不尽
|
|
|
IP 地址: 已记录
|
报告
|
|
|
|
2012-09-07, 19:19 下午
|
特来劲同学
注册: 2009-08-28
发 贴: 37
|
Re: 冰天雪地 7200。C 旋转 等待 张老师和其他前辈指点 手工修改pde重启
|
|
|
|
|
|
IP 地址: 已记录
|
报告
|
|
|
|
2012-09-07, 22:39 下午
|
特来劲同学
注册: 2009-08-28
发 贴: 37
|
Re: 冰天雪地 7200。C 旋转 等待 张老师和其他前辈指点 手工修改pde重启
|
|
|
|
试了下,
修改nt所在的P位重启,修改非nt所在的P位不重启。。。都是pde为什么会有这样的不同呢? 请老师前辈们指点
|
|
|
IP 地址: 已记录
|
报告
|
|
|
|
2012-09-08, 10:21 上午
|
特来劲同学
注册: 2009-08-28
发 贴: 37
|
Re: 冰天雪地 7200。C 旋转 等待 张老师和其他前辈指点 手工修改pde重启
|
|
|
|
|
|
IP 地址: 已记录
|
报告
|
|
|
|
2012-09-10, 12:58 下午
|
格蠹老雷
注册: 2005-12-19
发 贴: 1,303
|
Re: 冰天雪地 7200。C 旋转 等待 张老师和其他前辈指点 手工修改pde重启
|
|
|
|
推测的重启过程:
A. 内核使用的PDE被改为无效
B. 因为中断或者DDI调用等执行到受影响的内核函数
C. CPU发现PDE无效,准备报Page Fault
D. CPU打算转去执行处理Page Fault的Trap函数,但是因为因为一个PDE最多对应于1024个页表,一个PDE被改为无效后,很多内核的内容都无效了,如果IDT或者Trap函数无效,那么会再次触发Page Fault
E. 以上两步无穷递归,系统便重启了,可能触发Double Fault,但是Double Fault的处理函数也可能无法执行了...
使用硬件调试器可能可以验证以上推测的...
|
|
|
IP 地址: 已记录
|
报告
|
|
|
|
2012-09-10, 20:33 下午
|
特来劲同学
注册: 2009-08-28
发 贴: 37
|
Re: 冰天雪地 7200。C 旋转 等待 张老师和其他前辈指点 手工修改pde重启
|
|
|
|
感谢张老师回复! 之前也和张老师想的一样,然后又开始怀疑这个想法,因为是这样的: 调式我的驱动代码: void MarkPdeNotPresent( PPDE pPde ) { __asm { mov eax, pPde and dword ptr [eax], 0xFFFFFFFE //mark the pde not present } }这一句and dword ptr [eax], 0xFFFFFFFE 一执行系统便重启,这一句仅仅是一个内存操作,nt内核的tlb应该不会被刷新,即便被刷新,当前的引用代码和数据也还在我的驱动中(所在pde pte是存在的),驱动中在执行这个函数前也已经hook了缺页中断,系统的也是单核的,所以又怀疑了,是调试引起的(因为调试要调用内核调试引擎),就在真机上测,还是重启。个人认为cpu内部一些部件可能并不使用tlb,而是直接用的二级页转化寻址,发现不存在便重启。还是没弄明白 张老师,还有就是如果修改其他非nt内核的pde的P位不会出现重启现象,仅仅是nt才出现
|
|
|
IP 地址: 已记录
|
报告
|
|
|
|
2012-09-11, 10:56 上午
|
kkindof
注册: 2011-11-10
发 贴: 15
|
Re: 冰天雪地 7200。C 旋转 等待 张老师和其他前辈指点 手工修改pde重启
|
|
|
|
我个人理解认同张老师说的原因,也许就是会经过idt的缺页中断。
不知道你是怎么测试的,你能保证你自己的缺页中断处理能正确的处理回PDE为有效的情况吗?
|
|
|
IP 地址: 已记录
|
报告
|
|
|
|
2012-09-12, 09:08 上午
|
特来劲同学
注册: 2009-08-28
发 贴: 37
|
Re: 冰天雪地 7200。C 旋转 等待 张老师和其他前辈指点 手工修改pde重启
|
|
|
|
|
|
IP 地址: 已记录
|
报告
|
|
|
|
高端调试 » 软件调试 » Windows内核调试 » Re: 冰天雪地 7200。C 旋转 等待 张老师和其他前辈指点 手工修改pde重启
|
|
|
|
|
|