分析BSOD(WinDbg)超越!analyze -v

时间:2016-11-04 17:03:57

标签: windows debugging windbg bsod

我正在尝试分析在重启期间在Windows 10计算机上发生的BSOD(0xFC,ATTEMPTED_EXECUTE_OF_NOEXECUTE_MEMORY),但我被卡住了。

!analyze -v提供了有用的信息,如:

    DEFAULT_BUCKET_ID:  WIN8_DRIVER_FAULT
    PROCESS_NAME:  System
    MODULE_NAME: mrxsmb
    IMAGE_NAME:  mrxsmb.sys
    FAILURE_BUCKET_ID:  0xFC_mrxsmb!MRxSmbQueryLbfoTeamCapability
    BUCKET_ID:  0xFC_mrxsmb!MRxSmbQueryLbfoTeamCapability
    PRIMARY_PROBLEM_CLASS:  0xFC_mrxsmb!MRxSmbQueryLbfoTeamCapability

        # Child-SP          RetAddr           Call Site
    00 ffffd000`20505ba8 fffff802`a03e1a7c nt!KeBugCheckEx
    01 ffffd000`20505bb0 fffff802`a0319229 nt! ?? ::FNODOBFM::`string'+0x1377c
    02 ffffd000`20505bf0 fffff802`a031a661 nt!MiSystemFault+0x7e9
    03 ffffd000`20505ce0 fffff802`a03c8bbc nt!MmAccessFault+0x5f1
    04 ffffd000`20505e40 fffff800`1cf70030 nt!KiPageFault+0x13c
    05 ffffd000`20505fd8 fffff802`a072fea2 ndis!_NULL_IMPORT_DESCRIPTOR+0x558
    06 ffffd000`20505fe0 fffff802`a07300e6 nt!IopXxxControlFile+0x1162
    07 ffffd000`205061b0 fffff802`a03ca1a3 nt!NtDeviceIoControlFile+0x56
    08 ffffd000`20506220 fffff802`a03c2860 nt!KiSystemServiceCopyEnd+0x13
    09 ffffd000`20506428 fffff800`1d7df2aa nt!KiServiceLinkage
    0a ffffd000`20506430 fffff800`1d818b5b mrxsmb!MRxSmbQueryLbfoTeamCapability+0x16a
    0b ffffd000`20506570 fffff800`1cbc1c7d mrxsmb!MRxSmbPnPBindingHandler+0x1ab
    0c ffffd000`205066e0 fffff800`1cbc2194 TDI!TdiNotifyNewPnpClient+0x12d
    0d ffffd000`20506710 fffff800`1cbc1db0 TDI!TdiExecuteRequest+0x2d4
    0e ffffd000`20506760 fffff800`1cbc184c TDI!TdiHandleSerializedRequest+0x120
    0f ffffd000`205067d0 fffff800`1d7e0b96 TDI!TdiRegisterPnPHandlers+0x12c
    10 ffffd000`20506800 fffff800`1d81ab71 mrxsmb!MRxSmbStartTransport+0xfe
    11 ffffd000`20506890 fffff800`1d228f2f mrxsmb!MRxSmbStart+0x51
    12 ffffd000`205068e0 fffff800`1d816faf rdbss!RxStartMinirdr+0xef
    13 ffffd000`20506930 fffff800`1d7d366e mrxsmb!MRxSmbDevFcbXXXControlFile+0x1eb
    14 ffffd000`205069a0 fffff800`1d2567de mrxsmb!SmbShellDevFcbXXXControlFile+0xe
    15 ffffd000`205069d0 fffff800`1d256665 rdbss!RxXXXControlFileCallthru+0xb6
    16 ffffd000`20506a00 fffff800`1d2694d9 rdbss!RxCommonDevFCBFsCtl+0xa5
    17 ffffd000`20506a50 fffff802`a0367c11 rdbss!RxFspDispatch+0xe9
    18 ffffd000`20506b10 fffff802`a034f399 nt!IopProcessWorkItem+0x81
    19 ffffd000`20506b80 fffff802`a02c3b35 nt!ExpWorkerThread+0xe9
    1a ffffd000`20506c10 fffff802`a03c4b16 nt!PspSystemThreadStartup+0x41
    1b ffffd000`20506c60 00000000`00000000 nt!KiStartSystemThread+0x16

这些信息让我知道出了什么问题: 根据WinDbg,问题的根源可能在 mrxsmb!MRxSmbQueryLbfoTeamCapability函数中。 MRxSMB是所谓的“SMB迷你重定向器”。重定向器是一个组件,它是远程文件系统驱动程序的一部分。 rdbss的东西也是构建MRxSMB的重定向器架构的一部分。 TDI的东西代表“传输驱动程序接口”,并且根据Windows Internals预订某种遗留的“内核模式设备驱动程序,它实现了网络API实现的内核模式部分”。

由此我假设Windows尝试通过SMB访问远程文件系统。我认为它实际上试图访问无法访问的网络驱动器。 但我想了解为什么会导致BSOD。

我的问题是:

  1. WinDbg如何知道问题以mrxsmb!MRxSmbQueryLbfoTeamCapability+0x16a开头而后不会发生?

  2. ndis!_NULL_IMPORT_DESCRIPTOR看起来很可疑。根据谷歌这样的描述符标志着一个加载库的结束。但为什么它会在这里显示为功能呢?

  3. 如果我取回ndis!_NULL_IMPORT_DESCRIPTOR的返回地址(fffff802`a072fea2)并在内存中返回一些字节,我就明白了:

  4.     1: kd> u fffff802`a072fe90 fffff802`a072fea2
        nt!IopXxxControlFile+0x1150:
        fffff802`a072fe90 eb13            jmp     nt!IopXxxControlFile+0x1165 (fffff802`a072fea5)
        fffff802`a072fe92 488bd7          mov     rdx,rdi
        fffff802`a072fe95 488b8c2488000000 mov     rcx,qword ptr [rsp+88h]
        fffff802`a072fe9d e8fe8dc1ff      call    nt!IofCallDriver (fffff802`a0348ca0)
        fffff802`a072fea2 448be0          mov     r12d,eax
    

    我的假设是否正确,ndis!_NULL_IMPORT_DESCRIPTOR+0x558事实实际发生在nt!IofCallDriver,因为这是ndis!_NULL_IMPORT_DESCRIPTOR+0x558的返回地址之前的最后一条指令?但是为什么这个函数不会出现在堆栈跟踪中呢?

    1. 如何实际获取函数参数?根据我的理解,我不能,因为调用约定是前4个参数是在寄存器而不是堆栈中传递的,而我只有最后一个操作的寄存器内容?

    2. 如何进行?

0 个答案:

没有答案