Visual Studio 中的 Windows 内核调试器如何工作?

bbo*_*sak 2 windows debugging kernel driver

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

Jon*_*art 5

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

你会看到一些符号的前缀内核Kd一样KdEnableDebugger,例如。这些是与内核调试相关的函数。Kdp功能是私有的

调试器的接口特定部分在kd1394.dll(Firewire)、kdcom.dll(Serial) 或kdusb.dll(USB) 中实现。内核链接到这些 DLL 以实现低级协议,具有诸如KdSendPacket.

您应该查看这篇内容丰富的文章:内核和远程调试器。摘录:

Win2k 内核调试支持内置于内核中。Win2k OS 定义了一组例程,这些例程协同为 WinDbg 等远程调试器提供内核调试支持。总的来说,这些例程实现了称为“内核调试器”的 Win2k OS 组件。

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