【问题标题】:How to break into KD(Windbg) for Explorer crash如何闯入 KD(Windbg) 导致 Explorer 崩溃
【发布时间】:2014-01-04 04:23:10
【问题描述】:

我在 Explorer.exe 中看到了崩溃,因为我们的安全软件 dll 加载到了 Explorer.exe。

崩溃发生在系统关闭期间。 VM 连接到内核调试器。发生异常时,我没有看到内核调试器中断。我尝试了所有调试事件过滤器。但我没能成功。

有人可以建议我吗,为什么出现异常时我看不到中断。 我想在异常发生时闯入调试器。 我可以在内核模式中使用 SXE ud "dllName" 在卸载 perticula dll 时通知我吗?

例外是 资源管理器崩溃,“0x6ad88b5 处的指令引用了 0x0000000 处的内存。无法读取内存”

【问题讨论】:

    标签: debugging crash kernel windbg usermode


    【解决方案1】:

    这应该可行:

    1. 从 WinDbg 启动 gflags.exe。
    2. 转到“图像文件”选项卡,输入“explorer.exe”并按 TAB 键。
    3. 勾选第一项“Stop on Exception”。

    现在当 explorer.exe 崩溃并连接内核调试器时,WinDbg 应该会中断。

    【讨论】:

    • 感谢您的回复。但是当我发出关闭时会发生资源管理器崩溃,此时所有进程都已终止。这可能是原因,即使使用 Gflags 或“Windbg -I”我也无法捕捉到异常
    【解决方案2】:

    首先,在内核模式调试时加载或卸载DLL不会导致中断,但是在用户模式调试时它们工作得很好。

    我相信内核模式调试应该能够在加载或卸载内核模式二进制文件(如 .SYS 文件)时中断。

    现在,回答你的问题。一种方法可能是,

    1. 将 Windbg 设置为默认的事后调试器。 windbg.exe -I。 这将确保您在发生任何异常时中断调试器。但这将是用户模式调试。

    2. 接下来,假设您有 KD 设置,只需执行 .breakin,即可将您从用户模式转换为内核模式调试。

    斜体是调试器命令。

    【讨论】:

    • 不幸的是,当我设置事后调试器“Windbg -I”时,异常从未发生。它运行没有问题。 :(
    • Windbg -I,不应该真正改变 explorer.exe 的工作。如果没有发生异常,则表明您有时间问题。我建议多次执行重现场景。这可能会帮助您崩溃。或者正如@Peter 建议的那样,在 gflags 下运行它,你会提前发现与内存相关的问题。如果它仍然没有重现,看起来这个错误已经消失了,很高兴:)
    • 非常感谢它的时间问题。我们正在使用 PeekMessage(&Msg, 0, 0, 0, PM_REMOVE);如果我使用 PM_NOREMOVE,它可以正常工作。
    猜你喜欢
    • 1970-01-01
    • 2012-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多