-
-
[翻译]WinDbg内核调试配置方法介绍
-
发表于: 2018-8-11 22:05 7244
-
本文中,笔者介绍了如何利用WinDbg调试器和虚拟机,为调试运行于Windows内核空间的驱动程序或代码配置环境。
在很多情况下,总有人向我咨询如何安装使用WinDbg调试器。为此,在本文中,我将向你展示如何利用WinDbg调试器和虚拟机,为调试运行于Windows内核空间的驱动程序或代码配置环境。
在本文实例中,我将使用安装了Windows 10系统的主机,来对运行于VMWare平台之上的虚拟机进行调试。另一种可能的情况是,使用一台虚拟机作为调试方,而另一台作为调试目标;但我们并不打算在本文中对这种情况的实例进行深入介绍。
在下载完成之后,运行开始安装(setup)。根据主机的更新情况,安装过程中可能需要下载某些.NET Framework程序包或Windows系统更新程序。在安装过程中,请选择“调试工具(Debugging Tools)”,如下图所示:
在安装完成之后,我们将注意力转向对待调试的虚拟机进行配置。第一步是在引导表中生成一个实体,并为其开启调试选项。要完成这项工作,我们将选择使用一台Windows 7系统的客户机,在该系统中bcdedit命令可用于完成这些任务。
如上图所示,不带参数运行该命令的结果,为我们展示了引导管理器的配置选项,和引导表中的每一个实体(初始情况下只有一个实体)。然后要生成一个启动调试的新实体,最简单的方法是复制第一个实体,并对其进行改造,具体命令如下图所示:
在复制生成了名为“启用调试(Activated Debug)”的实体之后,调试模式得以开启。现在查看表中实体的话,我们会看到新的实体已经出现在其中。最后,bcdedit命令(参考网址:9b4K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6V1L8$3y4K6i4K6u0W2L8h3W2U0M7X3!0K6L8$3k6@1i4K6u0W2j5$3!0E0i4K6u0r3P5X3S2Q4x3X3c8U0L8W2)9J5c8Y4N6A6L8X3c8G2N6%4y4Q4x3X3c8Z5j5i4u0V1N6$3q4J5k6g2)9J5c8X3c8J5K9i4k6W2M7Y4y4Q4x3V1k6V1k6i4k6@1k6i4y4@1i4K6u0r3j5X3!0G2N6q4)9J5k6s2m8S2M7X3q4E0k6i4c8W2M7Y4y4Q4x3X3c8@1L8#2)9J5k6r3g2F1j5h3u0D9k6g2)9J5k6r3c8W2j5Y4g2Y4k6$3W2F1k6#2!0q4c8W2!0n7b7#2)9^5z5g2!0q4z5q4!0n7c8W2)9&6z5q4!0q4y4g2)9^5c8W2!0m8c8W2!0q4y4q4!0n7b7W2!0m8y4g2!0q4y4#2)9&6y4q4!0m8z5q4!0q4y4W2)9&6c8q4!0m8y4g2!0q4y4g2!0m8c8W2!0n7z5g2!0q4y4g2!0m8c8g2)9^5z5g2!0q4z5q4!0m8x3#2)9^5y4g2N6A6L8V1c8T1k6#2!0q4y4#2)9&6b7g2)9^5y4q4!0q4y4q4!0n7z5q4!0n7b7W2!0q4y4W2)9&6b7#2!0n7b7g2!0q4y4g2)9&6x3W2)9^5b7#2!0q4z5q4)9&6z5g2)9&6b7g2!0q4y4W2)9^5b7W2)9&6c8W2!0q4y4W2)9&6b7#2!0n7b7g2!0q4y4q4!0n7z5g2)9^5b7W2!0q4z5g2)9&6y4#2!0n7y4q4!0q4y4#2)9&6b7g2)9^5y4q4!0q4z5g2)9^5x3q4)9&6b7g2!0q4y4q4!0n7c8W2!0m8x3g2!0q4y4#2)9^5c8g2!0m8c8W2!0q4y4g2!0m8x3W2)9^5x3#2!0q4z5q4!0n7c8W2)9&6b7W2!0q4z5q4!0m8x3g2)9^5b7#2!0q4z5g2)9^5y4g2)9^5c8q4!0q4y4#2!0n7c8q4!0m8c8g2!0q4x3#2)9^5x3q4)9^5x3W2!0q4z5q4)9^5x3q4)9^5b7#2!0q4y4W2)9^5z5q4)9&6x3g2!0q4y4g2!0n7x3q4)9^5y4W2!0q4y4g2)9&6x3q4)9&6x3g2!0q4y4q4!0n7c8q4!0m8x3q4!0q4y4g2!0n7x3g2)9&6y4g2!0q4y4#2!0m8y4q4!0n7b7g2!0q4y4g2)9^5c8W2!0m8y4W2!0q4y4q4!0n7z5q4)9^5x3q4!0q4y4#2!0m8y4#2)9^5c8q4!0q4y4g2!0m8c8g2)9^5b7#2!0q4y4W2)9^5z5q4)9&6x3q4!0q4z5q4!0n7c8W2)9&6z5g2!0q4z5g2!0m8x3g2!0n7z5g2!0q4y4g2!0n7y4#2!0m8y4g2!0q4y4q4!0n7c8q4)9&6b7#2!0q4y4#2)9&6b7g2)9^5y4q4!0q4y4W2)9&6y4W2!0n7z5g2!0q4y4W2!0n7x3#2)9&6y4g2!0q4c8W2!0n7b7#2)9&6b7g2!0q4y4g2)9&6b7#2!0m8z5q4!0q4z5q4)9&6z5g2)9&6b7g2!0q4y4W2)9^5b7W2)9&6c8W2!0q4y4W2)9&6b7#2!0n7b7g2!0q4y4q4!0n7z5q4!0m8c8q4!0q4y4q4!0n7c8q4!0n7c8W2!0q4y4#2)9&6y4q4!0m8z5q4!0q4x3W2)9^5x3q4)9&6b7#2N6A6L8W2)9J5b7W2u0Q4c8e0u0Q4z5o6m8Q4z5f1c8Q4c8e0N6Q4b7V1u0Q4z5o6c8Q4c8e0g2Q4z5e0m8Q4z5o6S2Q4c8e0W2Q4z5e0c8Q4b7f1g2Q4c8e0S2Q4b7U0m8Q4z5o6y4Q4c8e0g2Q4z5o6N6Q4b7V1q4Q4c8e0S2Q4b7V1k6Q4z5e0m8Q4c8e0S2Q4b7e0q4Q4z5p5y4Q4c8e0g2Q4b7f1k6Q4b7U0W2Q4c8e0S2Q4b7f1k6Q4z5f1c8Q4c8e0k6Q4b7e0q4Q4z5o6k6Q4c8f1k6Q4b7V1y4Q4z5p5y4Q4c8e0g2Q4b7U0W2Q4b7U0k6Q4c8e0g2Q4z5f1y4Q4b7e0S2Q4c8e0g2Q4b7f1k6Q4b7U0W2Q4c8e0S2Q4b7f1k6Q4z5f1c8Q4c8e0k6Q4b7e0q4Q4z5o6k6Q4c8e0c8Q4b7U0S2Q4b7f1c8Q4c8e0S2Q4b7V1g2Q4z5e0y4Q4c8e0g2Q4z5o6g2Q4b7e0g2Q4c8e0u0Q4z5o6m8Q4z5f1y4E0M7$3y4G2L8X3k6A6k6#2!0q4x3W2)9^5x3q4)9&6c8q4!0q4y4#2)9^5y4q4!0n7y4W2!0q4y4g2)9&6x3q4)9^5c8g2!0q4y4g2)9&6b7W2)9&6c8g2!0q4z5q4!0n7c8q4!0m8y4W2!0q4c8W2!0n7b7#2)9^5b7#2!0q4y4q4!0n7c8q4!0m8x3q4!0q4y4g2!0n7x3q4)9^5y4W2!0q4z5q4!0n7c8W2)9&6b7W2!0q4y4g2)9^5y4g2!0m8y4g2!0q4y4g2)9^5z5q4!0n7x3q4N6A6L8X3c8G2N6%4y4Q4c8e0N6Q4b7U0y4Q4b7V1u0Q4c8e0N6Q4b7V1u0Q4z5f1k6Q4c8e0g2Q4z5e0m8Q4b7f1k6Q4c8e0g2Q4z5p5q4Q4b7e0S2Q4c8e0N6Q4z5o6W2Q4b7U0W2Q4c8e0g2Q4b7f1g2Q4z5f1q4Q4c8e0W2Q4z5o6g2Q4z5p5c8Q4c8e0N6Q4b7V1c8Q4b7f1g2Q4c8e0N6Q4z5p5g2Q4b7f1k6Q4c8e0g2Q4b7e0u0Q4z5o6y4Q4c8e0c8Q4b7U0S2Q4b7f1c8Q4c8e0y4Q4z5o6m8Q4z5o6u0Q4c8e0g2Q4z5f1y4Q4b7e0S2Q4c8e0u0Q4z5o6m8Q4z5f1y4Q4c8e0g2Q4z5e0m8Q4b7f1k6Q4c8e0g2Q4z5p5q4Q4b7e0S2Q4c8e0u0Q4z5o6m8Q4z5f1c8Q4c8e0k6Q4b7e0m8Q4z5o6N6Q4c8e0N6Q4b7f1c8Q4b7V1g2Q4c8e0c8Q4b7U0S2Q4b7f1c8Q4c8f1k6Q4b7V1y4Q4z5p5y4Q4c8e0c8Q4b7V1c8Q4b7e0m8Q4c8e0S2Q4z5o6y4Q4b7V1c8Q4c8e0g2Q4b7e0c8Q4z5f1k6Q4c8e0g2Q4b7f1k6Q4b7U0W2Q4c8e0W2Q4b7f1u0Q4z5e0S2Q4c8e0N6Q4b7V1q4Q4b7e0N6Q4c8e0W2Q4z5o6m8Q4z5o6W2Q4c8e0W2Q4b7e0q4Q4b7U0W2Q4c8e0S2Q4b7V1k6Q4z5f1u0Q4c8e0S2Q4b7e0q4Q4z5p5y4Q4c8e0N6Q4b7V1y4Q4z5e0k6Q4c8e0S2Q4b7V1g2Q4z5e0q4Q4c8f1k6Q4b7V1y4Q4z5p5y4Q4c8e0g2Q4b7e0k6Q4z5o6u0Q4c8e0c8Q4b7U0S2Q4z5p5u0Q4c8e0g2Q4z5f1u0Q4b7V1g2Q4c8e0k6Q4z5o6W2Q4z5o6m8Q4c8e0N6Q4b7e0c8Q4b7V1q4Q4c8f1k6Q4b7V1y4Q4z5f1p5`.
我们的主机和虚拟机将通过COM2串行端口(或我们所选择的端口)进行通信,该端口的同步波特率为115200。我建议不要改变波特率,而是使用COM2端口代替COM1进行通信。考虑到虚拟机很可能没有串行端口,我们需要为其添加一个。对于VMWare平台,可以在配置界面中进行如下操作:
选择如图所示选项。重要的是,我们需要为其赋予形如“\\.\pipe\com_2”的名称。现在,所有内容都配置完毕,下一步需要做的就是重启虚拟机,使其以调试模式引导启动:
在选择了该选项之后,系统启动过程应该就和正常情况一样了。在桌面上,我们可以保存一个虚拟机快照,或者准备想要调试的相应环境。一切就绪之后,我们需要回到主机中,打开WinDbg调试器来开启调试会话。从“文件(File)”菜单中选择“内核调试(Kernel Debugging)”,然后在COM标签页中按照如下图所示的格式填写相关内容:
当点击“OK”按钮时,将连接WinDbg调试器,但此时我们无法与虚拟机进行交互,除非我们在它运行某条指令时选择暂停。要完成这项工作,请按住“Ctrl+Pause”组合键(或者“调试(Debug)->中断(Break)”菜单项)。如果现在转到虚拟机中,我们会看到虚拟机处于冻结状态,即无法移动鼠标或者从键盘获得响应。考虑到虚拟机处于暂停在某条指令的状态下,这很正常。在主机端,我们将看到某些类似于这种状态的输出信息,如下图所示:
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课