【问题标题】:How does the Windows kernel debugger in Visual Studio work?Visual Studio 中的 Windows 内核调试器如何工作?
【发布时间】:2014-06-30 14:56:28
【问题描述】:

我最近开始尝试为 Windows 开发文件系统驱动程序,并开始研究 Visual Studio 2013 中提供的内核调试器。内核开发人员是一款了不起的软件——它能够调试实时内核通过 RS232 连接连接的远程机器的(断点、堆栈跟踪、内存访问和所有内容)。不过,我不明白的一件事是——如何通过 RS232 端口进行这种调试?我对内核的理解是,它是直接寻址硬件组件的软件,是系统中最底层的软件之一。怎么会有东西在内核“之上”运行,从而允许内核本身被远程调试?怎么可以纯软件调试内核?不干扰响应机器本身的调试请求的软件(可能在内核下运行)?

【问题讨论】:

    标签: windows debugging kernel driver


    【解决方案1】:

    内核调试器既不是高于也不是低于内核。相反,它是内核的一部分。即使您正在调试并且内核停止,处理调试器连接的内核部分仍然处于活动状态。

    您将在内核中看到许多以Kd 为前缀的符号,例如KdEnableDebugger。这些是与内核调试相关的功能。 Kdp 函数是私有的

    调试器的特定接口部分在kd1394.dll(火线)、kdcom.dll(串行)或kdusb.dll(USB)中实现。内核链接这些 DLL 以实现低级协议,具有 KdSendPacket 等函数。

    您应该查看这篇内容丰富的文章:Kernel and remote debuggers。摘录:

    Win2k 内核调试支持内置于内核中。 Win2k OS 定义了一组例程,它们协同地为诸如 WinDbg 之类的远程调试器提供内核调试支持。这些例程共同实现了称为“内核调试器”的 Win2k OS 组件。

    内核调试器的基本操作比较简单。当目标系统正常运行时,内核调试器安静地休眠;只有当某些事件发生时,它才会付诸行动。具体来说,它在以下情况下被激活:引发异常(由处理器或通过调用ZwRaiseException)、命中断点或请求本机调试服务。此外,当目标检测到来自远程调试器的闯入请求时,内核调试器也会被激活。内核调试器的工作是构建系统中发生的事件的描述,并将其转发给远程调试器供用户分析。

    【讨论】:

    • 如果在与远程调试器本身通信的内核代码中放置断点会发生什么
    • 好问题。我猜要么 1)调试器阻止了这种情况,要么 2)系统将锁定或 BSOD。
    猜你喜欢
    • 2012-06-17
    • 1970-01-01
    • 2012-04-26
    • 1970-01-01
    • 2016-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多