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内核调试

帖子发起人: 特来劲同学   发起时间: 2012-09-07 17:36 下午   回复: 13

Print Search
帖子排序:    
   2012-09-07, 17:36 下午
tangyuan1988 离线,最后访问时间: 2012/9/29 9:28:41 特来劲同学

发帖数前25位
注册: 2009-08-28
发 贴: 37
冰天雪地 7200。C 旋转 等待 张老师和其他前辈指点 手工修改pde重启
Reply Quote
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 下午
tangyuan1988 离线,最后访问时间: 2012/9/29 9:28:41 特来劲同学

发帖数前25位
注册: 2009-08-28
发 贴: 37
Re: 冰天雪地 7200。C 旋转 等待 张老师和其他前辈指点 手工修改pde重启
Reply Quote
 等的好累啊~ 继续等~。~
IP 地址: 已记录   报告
   2012-09-07, 22:39 下午
tangyuan1988 离线,最后访问时间: 2012/9/29 9:28:41 特来劲同学

发帖数前25位
注册: 2009-08-28
发 贴: 37
Re: 冰天雪地 7200。C 旋转 等待 张老师和其他前辈指点 手工修改pde重启
Reply Quote
试了下, 修改nt所在的P位重启,修改非nt所在的P位不重启。。。都是pde为什么会有这样的不同呢? 请老师前辈们指点 
IP 地址: 已记录   报告
   2012-09-08, 10:21 上午
tangyuan1988 离线,最后访问时间: 2012/9/29 9:28:41 特来劲同学

发帖数前25位
注册: 2009-08-28
发 贴: 37
Re: 冰天雪地 7200。C 旋转 等待 张老师和其他前辈指点 手工修改pde重启
Reply Quote
周末哪都不去了继续等, 不弄明白 不吃饭了
IP 地址: 已记录   报告
   2012-09-08, 18:47 下午
Raymond 离线,最后访问时间: 2020/7/3 3:40:25 格蠹老雷

发帖数前10位
注册: 2005-12-19
发 贴: 1,303
Re: 冰天雪地 7200。C 旋转 等待 张老师和其他前辈指点 手工修改pde重启
Reply Quote

专研精神让人钦佩啊 ...

试过不同NT版本么?推测和PatchGuard有关


IP 地址: 已记录   报告
   2012-09-09, 09:24 上午
tangyuan1988 离线,最后访问时间: 2012/9/29 9:28:41 特来劲同学

发帖数前25位
注册: 2009-08-28
发 贴: 37
Re: 冰天雪地 7200。C 旋转 等待 张老师和其他前辈指点 手工修改pde重启
Reply Quote
终于看到张老师了!好兴奋啊!晚辈不才让老师见笑了。
张老师,没有 PatchGuard,我的系统是XP的呀
还请老师指点迷津

IP 地址: 已记录   报告
   2012-09-10, 12:58 下午
Raymond 离线,最后访问时间: 2020/7/3 3:40:25 格蠹老雷

发帖数前10位
注册: 2005-12-19
发 贴: 1,303
Re: 冰天雪地 7200。C 旋转 等待 张老师和其他前辈指点 手工修改pde重启
Reply Quote

推测的重启过程:

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 下午
tangyuan1988 离线,最后访问时间: 2012/9/29 9:28:41 特来劲同学

发帖数前25位
注册: 2009-08-28
发 贴: 37
Re: 冰天雪地 7200。C 旋转 等待 张老师和其他前辈指点 手工修改pde重启
Reply Quote
感谢张老师回复!
之前也和张老师想的一样,然后又开始怀疑这个想法,因为是这样的:
调式我的驱动代码:
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-10, 21:11 下午
Raymond 离线,最后访问时间: 2020/7/3 3:40:25 格蠹老雷

发帖数前10位
注册: 2005-12-19
发 贴: 1,303
Re: 冰天雪地 7200。C 旋转 等待 张老师和其他前辈指点 手工修改pde重启
Reply Quote

没有调试的时候,来个时钟中断或者切换一下线程就会引发刷新TLB,就引发上面说的过程了;在调试时,调试事件也会导致必须执行内核函数......


IP 地址: 已记录   报告
   2012-09-11, 10:56 上午
kkindof 离线,最后访问时间: 2014/7/12 2:53:28 kkindof

发帖数前75位
注册: 2011-11-10
发 贴: 15
Re: 冰天雪地 7200。C 旋转 等待 张老师和其他前辈指点 手工修改pde重启
Reply Quote
我个人理解认同张老师说的原因,也许就是会经过idt的缺页中断。

不知道你是怎么测试的,你能保证你自己的缺页中断处理能正确的处理回PDE为有效的情况吗?


IP 地址: 已记录   报告
   2012-09-11, 11:46 上午
tangyuan1988 离线,最后访问时间: 2012/9/29 9:28:41 特来劲同学

发帖数前25位
注册: 2009-08-28
发 贴: 37
Re: 冰天雪地 7200。C 旋转 等待 张老师和其他前辈指点 手工修改pde重启
Reply Quote
老师,可是线程切换刷新的是非全局的tlb呀,nt的tlb是含有G全局的tlb,书上上这中的不会被刷掉啊


IP 地址: 已记录   报告
   2012-09-11, 11:47 上午
tangyuan1988 离线,最后访问时间: 2012/9/29 9:28:41 特来劲同学

发帖数前25位
注册: 2009-08-28
发 贴: 37
Re: 冰天雪地 7200。C 旋转 等待 张老师和其他前辈指点 手工修改pde重启
Reply Quote
回kkindof
可是我已经在驱动中将缺页异常处理器替换到我的函数里了啊
请兄台指点

IP 地址: 已记录   报告
   2012-09-11, 13:04 下午
kkindof 离线,最后访问时间: 2014/7/12 2:53:28 kkindof

发帖数前75位
注册: 2011-11-10
发 贴: 15
Re: 冰天雪地 7200。C 旋转 等待 张老师和其他前辈指点 手工修改pde重启
Reply Quote
那又怎么样,你预期是想看到什么结果?

有可能执行了你的HOOK函数的话,你看得出来吗?

IP 地址: 已记录   报告
   2012-09-12, 09:08 上午
tangyuan1988 离线,最后访问时间: 2012/9/29 9:28:41 特来劲同学

发帖数前25位
注册: 2009-08-28
发 贴: 37
Re: 冰天雪地 7200。C 旋转 等待 张老师和其他前辈指点 手工修改pde重启
Reply Quote
现在的预期就是不要看到重启,哪怕蓝屏都可以


IP 地址: 已记录   报告
高端调试 » 软件调试 » Windows内核调试 » 冰天雪地 7200。C 旋转 等待 张老师和其他前辈指点 手工修改pde重启

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