我最近开始尝试为Windows开发一个文件系统驱动程序,并开始着眼于Visual Studio 2013中提供的内核调试器。内核开发人员是一个了不起的软件 - 它能够调试活动的内核(断点,堆栈跟踪,内存访问以及其他所有)通过RS232连接连接的远程机器。但我不明白的一件事 - 是如何通过RS232端口进行调试?我对内核的理解是,它是一个直接针对硬件组件的软件,是系统中最低级别的软件之一。如何在内核之上“运行”,这将允许远程调试内核本身?它是如何纯粹用软件进行内核调试的;而不会干扰软件响应机器本身的调试请求(这可能会在内核中运行)?Visual Studio中的Windows内核调试器如何工作?
2
A
回答
4
内核调试器既不是以上的也不是以下的内核。相反,它是内核的部分。即使在调试时,并且内核停止了,处理调试器连接的内核部分仍处于活动状态。
例如,您将在内核中看到以Kd
为前缀的多个符号,如KdEnableDebugger
。这些是与内核调试有关的功能。 Kdp
功能是私人。
调试器的接口特定部分在kd1394.dll
(Firewire),kdcom.dll
(Serial)或kdusb.dll
(USB)中实现。内核链接到这些DLL以实现低级协议,其功能如KdSendPacket
。
你应该看看这个非常翔实的文章:Kernel and remote debuggers。摘录如下:
Win2k内核调试支持内置在内核中。 Win2k操作系统定义了一组例程,这些例程协同地为远程调试器(如WinDbg)提供内核调试支持。这些例程共同实现了称为“内核调试器”的Win2k操作系统组件。
内核调试器的基本操作非常简单。当目标系统正常运行时,内核调试器正在安静地睡眠;只有当某些事件发生时才会采取行动。具体来说,只要发生异常(由处理器或通过调用
ZwRaiseException
),命中断点或请求本地调试服务,就会激活它。而且,当目标检测到来自远程调试器的闯入请求时,内核调试器也被激活。内核调试器的工作是构建系统中发生的事件的描述,并将其转发给远程调试器供用户分析。
相关问题
- 1. 调试如何在Visual Studio中工作?
- 2. 调试器在Visual Studio中不工作
- 3. cuda nsight visual studio版内核调试
- 4. Visual Studio调试器不工作
- 5. Visual Studio 2015 Excel调试器不工作
- 6. Visual Studio 2005 - 调试器停止工作
- 7. 如何在Visual Studio或Parallel Nsight中调试CUDA内核
- 8. 调试NotificationEvent在内核调试(Windows)中
- 9. 如何使用visual studio 2008调试到CUDA内核代码?
- 10. 如何在Visual Studio 2012中指定的32位Windows调试做内核模式调试
- 11. Windows 8 Visual Studio 2012调试器问题
- 12. Windows Phone的编辑器\预览如何在Visual Studio中工作?
- 13. 如何在Visual Studio中调试时更改工作目录?
- 14. 的Visual Studio 2012的Windows内核调试 - 不能提供VM目标
- 15. 从Linux调试Windows内核
- 16. 如何获得在Visual Studio 11中工作的图形调试器?
- 17. 无法让调试器在Visual Studio代码中工作?
- 18. 的Visual Studio 2012的远程调试内核虚拟机
- 19. visual studio 2012调试器不起作用
- 20. visual studio 2012上的内核模式调试
- 21. 使用Visual Studio调试器调试C++
- 22. Visual Studio图形调试器
- 23. Visual Studio 2010调试器
- 24. 调试Visual Studio链接器
- 25. Visual Studio调试器问题
- 26. Visual Studio调试器问题
- 27. Visual Studio调试器问题
- 28. Visual Studio调试迭代器
- 29. 如何编写一个windows内核模式调试器?
- 30. 如何为Visual Studio调试工作进程指定标识?