Re: 对BSOD的过程一些疑问

Windows内核调试

对BSOD的过程一些疑问


大饼 2009-09-01, 01:47 上午
我用windbg调试虚拟机,输入.crash命令,这时候中断到windbg了,我看虚拟机上蓝屏界面已经绘制了,而跟据《软件调试》中说的,绘制画面是第五步,而第三步的时候会第一次中断到调试器,但是我的windbg在蓝屏绘制后才中断,也就是书上说的第二次中断。
另外书上第四步说系统调用KeDisableInterrupts函数禁止中断,但是中断是cpu的功能,这个函数如何能禁止呢,这个函数执行后系统还有其它的操作,如果中断都禁止了,其它的操作应该不能进行吧。
另外一个奇怪的问题是我对例如KeDisableInterrupts,KeRaiseIrql等函数下bu断点,再运行g命令,windbg以及虚拟机都会死掉,不知道为什么。还请张老师帮忙讲解一下

Re: 对BSOD的过程一些疑问


nigel 2009-09-01, 08:54 上午
你所提的部分问题张老师曾经给予过我指点,请进如下页面,或许对你会有帮助!http://advdbg.com/forums/2892/ShowPost.aspx

Re: 对BSOD的过程一些疑问


大饼 2009-09-01, 10:47 上午
恩,谢谢,这下知道了为什么有时候有的函数不能被调试。不过1,2两个问题还是不明白

Re: 对BSOD的过程一些疑问


格蠹老雷 2009-09-01, 13:03 下午

关于第一个问题,对于手工触发的蓝屏(停止码为0xE2,包括使用.crash命令的),KeBugCheck2故意判断了下,如果是就不中断了,看下汇编便可看到这个逻辑:

nt!KeBugCheck2+0x3e6:
805260d9 817d08e2000000  cmp     dword ptr [ebp+8],0E2h        ;看第一个参数,即StopCode是否等于E2
805260e0 747e            je      nt!KeBugCheck2+0x46d (80526160) ;如果相等则直接跳到下一个步骤
;;如果不等,则打印信息后中断到调试器

*** Fatal System Error: 0x0000008e
                       (0xC0000005,0xFA02F463,0xF9C4BB68,0x00000000)

Break instruction exception - code 80000003 (first chance)

A fatal system error has occurred.
Debugger entered on first try; Bugcheck callbacks have not been invoked.

...

;;如果是0xe2,则直接跳到这里

nt!KeBugCheck2+0x46d:
80526160 e85199feff      call    nt!KeDisableInterrupts (8050fab6)  ;清除中断标志
80526165 b11f            mov     cl,1Fh
80526167 ff1548464d80    call    dword ptr [nt!_imp_KfRaiseIrql (804d4648)]  ; 提升IRQL
8052616d b8ffffffff      mov     eax,0FFFFFFFFh

问题2,x86 CPU提供了CLI指令来清除(允许)中断标志,KeDisableInterrupts函数正是使用这条指令来做的:

lkd> u nt!KeDisableInterrupts
nt!KeDisableInterrupts:
80501d58 9c              pushfd                   ; 将标志寄存器压入栈
80501d59 58              pop     eax              ; 弹出到EAX寄存器,这是读取标志寄存器的典型做法
80501d5a 2500020000      and     eax,200h         ; 取IF位,也就是中断标志位
80501d5f c1e809          shr     eax,9            ; 右移到最低位
80501d62 fa              cli                      ; 清除IF位
80501d63 c3              ret

前几条指令是取当前的IF位作为返回值。

在这一步之后的操作都是不依赖于中断机制的,所以只能做有限的操作。

 

Re: 对BSOD的过程一些疑问


大饼 2009-09-02, 02:52 上午
明白了很多,多谢张老师指导

Powered by Community Server Powered by CnForums.Net