卸载驱动时unhook debug handler和恢复DRx后,触发了递归KiTrap01导致栈溢出蓝屏
Windows内核调试
卸载驱动时unhook debug handler和恢复DRx后,触发了递归KiTrap01导致栈溢出蓝屏
DS1987
2012-07-06, 12:07 下午
请教下大家:(特别是张老师)
这个问题折磨了我快2个星期了。我使用了5份代码,全部存在这个问题。(2份中国人的代码,3份老外的代码)
我要干什么:
我要hook idt的1号入口(debug handler),然后设置DR0寄存器设置一个硬件断点,(为了防止被清,我开启了DR7的GD位)
在卸载的时候,我先恢复DRx寄存器,然后unhook int 1,但是我发现winlogon进程的一个线程访问fs:[0]时触发了1号中断,而KiTrap01的入口处也有访问fs:[0]的代码(看wrk知道是保存exceptionlist表头指针),这样就无限递归了。。蓝屏(蓝屏后,windbg里查看drx寄存器,发现dr0-7都是乱七八糟的值,为啥DRx居然没有被清掉?)
我感到非常惊悚的事情:
1
.为什么访问fs:[0]会触发int 1中断。。。??太不可思议了吧
2
.为什么蓝屏时(处于winlogon进程),drx寄存器至少dr0寄存器不是0?要知道我卸载时是恢复了dr0的
(考虑了SMP的)
3
.在Ring0,DRx应该是和CPU相关的吧,应该和线程没关系吧,看intel手册是这么说的啊,那为啥会出现上面惊悚的第二条情况?
4
.为什么每次都是蓝在了winlogon进程?和线程切换有关系吗?
我贴一下我最后使用的代码:(最后用的是一个韩国人的代码,感觉算是写的好点的)
http://chpie.tistory.com/entry/KeyboardHook
请大家给指点下,谢谢
PS。这份韩国人的代码内提供了编译好了的exe和sys,我直接测试它的程序,在某些xp机器上也会卸载蓝屏(也是winlogon进程导致的KiTrap01栈溢出)