我最近开始开发Windows驱动程序。我想知道它是如何实际调试我的驱动程序的。我的设置是 - > Win7作为主机,XP作为VMware的访客,我正在通过串口进行调试。
我所做的研究:
我发现只有this链接说我正在谈论的事情很少。
我已经知道调试器如何在单个操作系统上运行,在这种情况下,调试器也在同一个操作系统上,因此它知道正在运行的进程。这是可以理解的。但是在这里,调试器是完全不同的操作系统,完全不同的环境。我只是说file->open source files
我能够提供断点!此外,当我加载驱动程序时,它实际上打破了。我的意思是为什么../怎么样? XP的内核是如何知道的(驱动程序是内核的扩展,至少是WDM,不知道WDK)有this
驱动程序的源代码?那还在它的控制之外(环境)?我的意思是我可以在其中打开10个带断点的文件,但它工作得很漂亮,我无法失败/欺骗它。
所以我想的是,每当我们在Win7上向windbg添加源代码时,它就会从该源创建二进制文件,并且每当XP要加载任何二进制文件时,它都会检查这是否是windbg正在等待的二进制文件。上面链接中令人困惑的是,Vikrant说调试器要求内核(XP)愿意调试进程 - >总线HELLO ...进程在XP上运行,而windbg在Win7上运行,并且不知道进程的name or id
。它有源代码,但考虑一个驱动程序是由300个文件构建的情况,只有一个,可能是最简单的文件在windbg中打开,它与驱动程序的源代码是如何匹配的?
答案 0 :(得分:1)
@Kjelll答案是对的。以下是完整的方案,包括对您的评论的解释:
windbg -dump -pdbpath xxx.sys
。这应该解释WinDBG如何找到符号文件,即使不在.sympathy
路径上(我相信你回答你对Kjell的评论)。答案 1 :(得分:0)
我认为您的链接可以很好地解释您的问题,但您可能没有意识到pdb的机制对调试器的作用。主机操作系统上的windbg使用pdb文件将源文件中的行nubers转换为guest虚拟机操作系统(xp)中的地址。然后,调试器代理使用此地址在来宾OS中设置断点(Int 3)。这与本地调试器对本地进程的做法非常相似。