2014-05-13 31 views
2

我最近开始尝试为Windows开发一个文件系统驱动程序,并开始着眼于Visual Studio 2013中提供的内核调试器。内核开发人员是一个了不起的软件 - 它能够调试活动的内核(断点,堆栈跟踪,内存访问以及其他所有)通过RS232连接连接的远程机器。但我不明白的一件事 - 是如何通过RS232端口进行调试?我对内核的理解是,它是一个直接针对硬件组件的软件,是系统中最低级别的软件之一。如何在内核之上“运行”,这将允许远程调试内核本身?它是如何纯粹用软件进行内核调试的;而不会干扰软件响应机器本身的调试请求(这可能会在内核中运行)?Visual Studio中的Windows内核调试器如何工作?

回答

4

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

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

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

你应该看看这个非常翔实的文章:Kernel and remote debuggers。摘录如下:

Win2k内核调试支持内置在内核中。 Win2k操作系统定义了一组例程,这些例程协同地为远程调试器(如WinDbg)提供内核调试支持。这些例程共同实现了称为“内核调试器”的Win2k操作系统组件。

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

相关问题