3. Hyper-V的调试
下面我们介绍Hyper-V的调试方法。在前面,我们简单介绍了Hyper-V的结构,它的虚拟机和宿主机运行在同一个权限下,并且,由Windows系统中的驱动虚拟出对应的虚拟设备。所以,在调试方面,Hyper-V便显得略繁琐。如果要调试Hyper-V在宿主机中的驱动的话,不得不要进行Windows内核的调试。
而且,由于Hypervisor层的权限要高于Windows内核权限,所以当需要调试Hypervisor层代码时,仅仅调试Windows内核并不能满足这一要求。
下面,我们介绍两种不同的方法来调试Hyper-V。一种是实体机双机调试,一种是VMware调试Hyper-V,并且我们会分别介绍两种方法的优缺点。
3.1. 需要准备的工具
在介绍两种调试方法之前,我们需要做一些准备。首先,我们要确定以哪种方式进行调试。如果你使用的机器是笔记本或者电脑主机没有串口接口,并且确定主机的CPU支持Intel VT-X和VT-d技术(如果您的CPU是AMD,请确认是否支持AMD-V和AMD-Vi)。拿笔者主机的CPU为例,如图1-20,支持Intel VT-x & VT-d。那么,您可以优先选择使用VMware双机调试Hyper-V。
图1-20 CPU型号为Intel i7- 4790
如果您的机器不支持Intel VT-d(AMD-Vi)的话,只能使用双实体机双机调试的办法调试Hyper-V。
在调试方法上,一般情况下,无论是实体机双机调试还是VMware双机调试,笔者还是优先选择使用网络调试的办法。因为网络调试的速度快,配置容易,调试效率极高。但是,在网络调试的调试底层代码过程中,可能因为网络调试引入新的问题,影响调试的结果。但串口调试不会产生这种“干扰”,但随着而来的是调试效率的极度下降。所以一般来说,笔者会使用网络调试作为一般情况下调试的方法。如果发现问题,会再在串口调试的环境下重新调试一遍,以排除干扰。而且,一般来说比较旧的机型保留串口的几率要大些,可以充分利用身边淘汰下来的旧机器作为串口调试机器。除此之外,也有1394线的调试办法,介于1394接口已经在现在的主机上消失了,现在使用1394线调试还需要自行安装1394 PCI板载卡。过程比较麻烦,所以在此不做考虑。
硬件工具
首先,需要确定您的主机后面板是否有串口接口,如果没有,那只能通过网络调试的办法进行双机调试。这需要您将两台主机连接在一个局域网内,并且能保证双方的正常通信。
如果主机后面板有串口接口,那么您可以使用串口进行双机调试。那么您需要一根RS232 Null- modem线。Null-modem线的接线见表1-4。
表1-4 Null-modem接线方式
Null-modem线一般在商场中是买不到的,所以可能需要你自己做或者找能定做线缆的商家定做。事实上,笔者在调试时,只需要将9针串口线两端的2,3脚对调,其他线路直连便可正常进行双机的通信和调试。
图1-21 9针串口管脚定义(左公右母)
图1-21为9针串口管脚定义,左边为公头,右边为母头。
软件工具
软件方面需要安装好WinDbg,最新版的SDK安装包可以到微软官方下载(6f2K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6V1k6i4k6W2L8r3!0H3k6i4u0Q4x3X3g2E0K9h3y4J5L8%4y4G2k6Y4c8Q4x3X3g2U0L8$3#2Q4x3V1k6W2L8W2)9J5k6s2g2K6i4K6u0r3N6$3W2F1k6r3!0%4M7#2)9J5c8X3S2S2M7X3c8%4j5i4u0W2i4K6u0r3N6$3W2F1k6r3!0%4M7#2)9J5k6r3c8J5K9i4k6W2M7W2)9J5k6r3E0A6N6q4)9J5z5g2!0q4x3#2)9^5x3q4)9^5x3W2!0q4z5g2)9&6z5g2!0m8y4q4!0q4y4W2!0m8c8q4!0m8y4q4!0q4y4q4!0n7z5g2)9^5b7W2!0q4y4g2!0m8y4q4)9&6y4W2!0q4c8W2!0n7b7#2)9^5b7#2!0q4y4W2)9^5z5q4)9&6x3g2!0q4y4q4!0n7b7W2!0m8b7#2!0q4z5q4!0n7c8W2)9&6z5q4!0q4z5g2)9&6b7#2)9^5x3q4!0q4z5q4!0m8y4W2)9^5x3g2!0q4y4g2!0n7c8g2!0m8c8g2!0q4z5q4!0n7c8q4!0m8c8W2!0q4y4#2)9&6b7g2)9^5y4q4!0q4y4#2!0m8b7#2!0m8y4W2!0q4y4g2)9^5c8W2!0n7y4#2!0q4y4W2)9&6y4W2)9^5y4#2!0q4y4q4!0n7b7W2!0n7y4W2!0q4c8W2!0n7b7#2)9^5b7#2!0q4z5q4!0m8c8W2!0n7y4#2!0q4y4W2!0m8x3q4!0n7z5g2!0q4y4W2)9^5c8q4!0m8c8g2!0q4y4q4!0n7c8q4!0m8x3q4!0q4z5q4!0m8x3W2!0m8b7W2!0q4z5q4!0n7x3q4)9^5x3#2!0q4z5q4!0m8c8W2)9&6y4g2!0q4y4#2)9&6b7g2)9^5y4q4!0q4y4#2!0n7x3#2!0n7b7W2!0q4y4#2!0n7b7W2)9&6c8W2!0q4y4g2)9^5z5q4!0n7x3q4!0q4y4g2!0n7c8g2!0m8c8g2!0q4z5q4!0n7c8q4!0m8c8W2!0q4y4g2!0m8c8g2)9&6z5q4!0q4y4W2)9&6y4W2!0n7z5g2!0q4y4q4!0n7z5q4)9^5b7W2!0q4z5q4!0n7c8q4!0n7c8q4!0q4y4#2!0m8b7#2!0m8y4W2!0q4y4g2)9&6x3q4)9^5z5q4!0q4y4W2)9^5x3W2!0m8z5q4!0q4z5q4!0m8x3W2!0m8b7W2!0q4z5q4!0n7x3q4)9^5x3#2!0q4z5q4!0m8c8W2)9&6y4g2!0q4y4#2!0n7x3#2!0n7b7W2!0q4y4#2!0n7b7W2)9&6c8W2!0q4y4#2)9&6b7g2)9^5y4q4!0q4y4#2!0m8b7#2!0m8y4W2!0q4y4g2)9^5c8W2!0n7y4#2!0q4y4W2)9&6y4W2)9^5y4#2!0q4y4q4!0n7b7W2!0n7y4W2!0q4y4g2)9^5b7#2)9^5y4g2)9J5z5r3S2@1N6s2m8K6i4K6y4m8i4K6u0r3i4K6u0r3k6r3g2$3k6h3I4G2M7r3g2J5i4K6u0W2L8h3W2U0M7X3!0K6L8$3k6@1i4K6u0W2j5$3!0E0i4K6u0r3k6h3&6Q4x3X3c8#2M7#2)9J5c8Y4N6A6L8X3c8G2N6%4y4Q4x3V1k6Z5j5i4u0V1N6$3q4J5k6g2)9J5c8X3c8G2N6$3&6D9L8$3q4V1i4K6u0V1M7%4W2E0j5X3!0D9M7#2)9J5z5g2!0q4x3#2)9^5x3q4)9^5x3R3`.`.
如果使用双实体机串口调试,那么还需要安装好HyperTerminal(739K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6h3S2A6L8r3N6J5j5h3g2$3k6g2)9J5k6h3y4G2L8g2)9J5c8X3S2&6M7r3g2J5N6r3g2J5L8h3W2F1j5h3I4Q4x3X3c8@1M7X3W2S2L8q4)9J5c8W2)9J5z5g2!0q4c8W2!0n7b7#2)9^5b7#2!0q4y4W2)9^5z5q4)9&6y4W2!0q4z5q4)9^5x3q4)9^5y4g2!0q4y4g2)9^5y4g2!0n7y4W2!0q4y4q4!0n7b7W2)9&6y4W2!0q4y4q4!0n7z5q4!0n7x3W2!0q4y4g2)9^5c8W2!0m8x3#2!0q4z5g2)9^5x3q4)9&6b7g2!0q4y4q4!0n7c8W2!0m8x3g2!0q4y4#2)9&6b7g2)9^5y4q4!0q4z5q4!0n7c8q4!0m8c8W2!0q4y4q4!0n7b7W2!0n7y4W2!0q4c8W2!0n7b7#2)9^5b7#2!0q4y4#2)9&6y4q4!0m8z5q4!0q4y4q4!0n7b7g2)9^5c8g2!0q4y4W2!0m8x3#2)9^5x3q4!0q4y4W2!0n7y4g2)9^5b7W2!0q4y4q4!0n7z5q4!0n7x3W2!0q4y4g2)9^5c8W2!0m8x3#2!0q4y4W2)9&6z5q4!0m8c8W2!0q4y4g2)9&6x3q4!0m8y4W2!0q4y4W2!0m8c8q4!0m8x3#2!0q4y4g2!0n7z5q4!0n7z5q4!0q4z5g2)9^5x3q4)9&6b7g2!0q4y4q4!0n7c8W2!0m8x3g2!0q4x3#2)9^5x3q4)9^5x3R3`.`.
下面我们配置WinDbg符号文件地址。我们需要新建一个环境变量,如图1-22所示。
图1-22 添加系统环境变量
在“环境变量”对话框中,点击“新建”按钮来新建一个系统环境变量。在“新建用户变量”对话框中,在“变量名”中填入“_NT_SYMBOL_PATH”,在“变量值”中填入“SRV*d:\symbols*7aaK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3#2K6k6r3I4Q4x3X3g2E0K9h3y4J5L8%4y4G2k6Y4c8Q4x3X3g2U0L8$3#2Q4x3V1k6V1L8%4N6F1L8r3!0S2k6q4)9J5c8Y4y4&6L8h3u0G2L8s2y4Q4c8e0u0Q4z5o6m8Q4z5f1c8Q4c8f1k6Q4b7V1y4Q4z5p5y4Q4c8e0N6Q4z5o6c8Q4b7U0k6Q4c8e0g2Q4z5e0m8Q4z5p5g2Q4c8e0N6Q4b7e0q4Q4b7f1g2Q4c8e0g2Q4b7f1g2Q4z5f1q4Q4c8e0c8Q4b7V1k6Q4z5f1c8Q4c8e0g2Q4b7f1c8Q4z5e0S2Q4c8e0y4Q4z5o6m8Q4z5o6u0Q4c8e0g2Q4z5o6g2Q4b7U0k6Q4c8e0c8Q4b7U0S2Q4b7f1c8Q4c8f1k6Q4b7V1y4Q4z5p5y4Q4c8e0u0Q4z5o6m8Q4z5f1y4Q4c8e0g2Q4z5p5k6Q4z5e0S2Q4c8e0W2Q4z5o6N6Q4z5p5k6Q4c8e0g2Q4z5o6m8Q4b7V1y4Q4c8e0u0Q4z5o6m8Q4z5f1c8Q4c8e0c8Q4b7U0S2Q4z5o6m8Q4c8e0k6Q4b7e0m8Q4z5p5k6Q4c8e0c8Q4b7U0S2Q4b7f1c8Q4c8e0u0Q4z5o6m8Q4z5f1y4V1i4K6y4m8i4K6g2o6M7%4W2E0j5X3!0D9M7#2!0q4x3W2)9^5x3q4)9&6c8q4!0q4y4q4!0n7b7W2!0m8x3#2!0q4z5q4!0m8x3g2!0m8z5q4!0q4y4q4!0n7c8q4!0m8x3q4!0q4y4g2!0m8c8g2)9^5z5g2!0q4z5q4!0m8x3#2)9^5y4g2!0q4y4#2!0m8b7#2!0m8y4W2!0q4y4g2)9^5c8W2!0n7y4#2!0q4y4W2)9&6y4W2)9^5y4#2!0q4y4q4!0n7b7W2!0n7y4W2!0q4y4g2)9^5b7#2)9^5y4g2!0q4y4W2)9&6y4#2!0n7y4W2!0q4z5g2)9^5x3q4)9^5z5g2!0q4y4W2)9^5b7W2!0m8z5g2!0q4y4#2)9&6b7g2)9^5y4q4!0q4y4g2!0m8c8g2)9^5z5g2!0q4z5q4!0m8x3#2)9^5y4g2!0q4y4q4!0n7c8q4)9^5c8q4!0q4y4#2!0n7c8q4!0m8c8g2!0q4c8W2!0n7b7#2)9&6b7W2!0q4x3W2)9^5x3q4)9&6b7$3S2@1N6s2m8Q4x3@1q4Q4x3V1k6Q4x3V1k6E0M7$3c8D9i4K6u0W2L8h3W2U0M7X3!0K6L8$3k6@1i4K6u0W2j5$3!0E0i4K6u0r3k6r3!0%4L8X3I4G2j5h3c8Q4x3V1k6K6P5h3#2T1L8$3I4K6i4@1f1J5i4K6R3H3i4K6W2p5i4@1f1@1i4@1u0n7i4@1p5K6i4@1f1^5i4@1p5I4i4@1p5^5i4@1f1#2i4@1u0q4i4@1q4q4i4@1f1^5i4@1u0p5i4@1q4r3i4@1f1%4i4K6W2m8i4K6R3@1i4@1f1%4i4@1q4o6i4@1p5$3i4@1f1#2i4K6S2r3i4@1t1%4i4@1f1$3i4K6V1$3i4K6R3%4i4@1f1@1i4@1u0n7i4@1t1$3i4@1f1$3i4K6W2o6i4K6S2p5i4@1f1#2i4K6S2m8i4@1p5I4i4@1f1#2i4K6V1&6i4@1p5^5i4@1g2r3i4@1u0o6i4K6S2o6i4@1f1#2i4@1p5$3i4K6R3J5i4@1f1$3i4K6W2q4i4K6W2o6i4@1f1$3i4K6W2o6i4@1q4o6i4@1f1#2i4K6W2o6i4@1t1H3i4@1f1%4i4@1q4o6i4@1p5$3i4@1f1#2i4K6S2r3i4@1t1%4i4@1f1$3i4K6V1$3i4K6R3%4i4@1f1@1i4@1u0n7i4@1t1$3i4@1f1@1i4@1t1^5i4@1q4p5i4@1f1$3i4@1t1J5i4@1p5I4i4@1f1$3i4K6W2o6i4K6R3&6i4@1f1#2i4K6S2o6i4@1t1&6i4@1f1&6i4K6R3#2i4K6S2p5i4@1f1%4i4K6W2m8i4K6R3@1i4@1f1%4i4@1q4o6i4@1p5$3i4@1f1#2i4K6S2r3i4@1t1%4i4@1f1$3i4K6V1$3i4K6R3%4i4@1f1@1i4@1u0n7i4@1t1$3i4@1f1$3i4K6V1%4i4@1t1$3i4@1g2r3i4@1u0o6i4K6S2o6i4@1f1@1i4@1u0q4i4@1u0r3i4@1f1@1i4@1u0o6i4K6W2m8i4@1f1@1i4@1u0n7i4K6S2q4i4@1f1#2i4@1u0q4i4@1q4q4i4@1f1^5i4@1u0p5i4@1q4r3i4@1f1%4i4@1q4o6i4@1p5$3i4@1f1#2i4K6S2r3i4@1t1%4i4@1f1$3i4K6V1$3i4K6R3%4i4@1f1@1i4@1u0n7i4@1t1$3i4@1f1$3i4K6W2o6i4K6S2p5i4@1f1#2i4K6S2m8i4@1p5I4i4@1f1#2i4K6V1&6i4@1p5^5i4@1f1@1i4@1t1^5i4K6S2m8i4@1f1@1i4@1t1^5i4K6S2n7i4@1f1^5i4@1u0p5i4@1u0p5i4@1f1$3i4K6R3&6i4K6R3H3i4@1f1&6i4K6W2o6i4K6R3H3i4@1f1%4i4K6W2m8i4K6R3@1i4@1f1%4i4@1q4o6i4@1p5$3i4@1f1#2i4K6S2r3i4@1t1%4i4@1f1$3i4K6V1$3i4K6R3%4i4@1f1@1i4@1u0n7i4@1t1$3i4@1f1K6i4K6R3H3i4K6R3J5i4@1f1^5i4@1u0r3i4K6V1&6i4@1f1@1i4@1t1^5i4@1q4m8i4@1f1$3i4K6V1$3i4@1t1H3i4@1f1#2i4@1u0n7i4@1u0m8i4@1f1%4i4K6W2m8i4K6R3@1i4@1f1%4i4K6S2q4i4@1q4r3i4@1f1#2i4@1p5J5i4K6R3K6i4@1f1#2i4K6S2r3i4K6V1^5i4@1f1&6i4K6R3%4i4K6S2r3i4@1f1%4i4K6V1@1i4@1p5^5i4@1f1@1i4@1u0m8i4K6S2q4i4@1f1&6i4K6R3#2i4K6S2p5i4@1f1%4i4@1u0p5i4@1q4q4i4@1f1#2i4K6R3#2i4@1p5^5i4@1f1#2i4@1t1I4i4K6R3H3i4@1f1%4i4@1q4o6i4@1p5$3i4@1f1#2i4K6S2r3i4@1t1%4i4@1f1$3i4K6V1$3i4K6R3%4i4@1f1@1i4@1u0n7i4@1t1$3i4@1f1#2i4K6W2o6i4@1t1H3i4@1f1#2i4K6W2p5i4K6R3H3i4@1g2r3i4@1u0o6i4K6S2o6i4@1f1%4i4K6V1@1i4@1t1I4i4@1f1@1i4@1u0m8i4K6S2q4i4@1f1$3i4K6R3^5i4K6V1I4i4@1f1@1i4@1u0n7i4@1q4o6i4@1f1$3i4@1t1%4i4@1u0n7i4@1f1#2i4K6S2m8i4@1p5H3i4@1f1#2i4K6W2o6i4@1p5^5i4@1f1@1i4@1u0m8i4K6R3$3i4@1f1%4i4@1t1K6i4@1u0n7i4@1f1%4i4@1u0n7i4K6W2r3i4@1f1%4i4K6S2q4i4@1q4r3i4@1f1#2i4@1p5J5i4K6R3K6i4@1f1#2i4K6S2r3i4K6V1^5i4@1f1&6i4K6R3%4i4K6S2r3i4@1f1@1i4@1t1^5i4@1q4p5i4@1g2r3i4@1u0o6i4K6S2o6i4@1f1$3i4K6R3&6i4K6R3H3i4@1f1@1i4@1u0n7i4@1p5#2i4@1f1@1i4@1t1^5i4K6S2p5i4@1f1%4i4K6V1@1i4@1p5^5i4@1f1$3i4@1q4r3i4K6S2r3i4@1f1$3i4@1q4o6i4@1p5I4i4@1f1#2i4K6V1H3i4@1q4r3i4@1f1#2i4K6S2m8i4@1p5^5g2$3W2F1c8r3u0Y4i4@1f1#2i4K6R3$3i4K6S2p5i4@1f1#2i4K6S2q4i4@1u0n7i4@1f1&6i4K6R3%4i4K6S2p5i4@1f1$3i4K6V1$3i4@1t1H3i4@1f1^5i4@1q4q4i4@1u0q4i4@1f1%4i4@1u0p5i4@1q4q4i4@1f1%4i4@1q4o6i4@1p5$3i4@1f1#2i4K6S2r3i4@1t1%4i4@1f1$3i4K6V1$3i4K6R3%4i4@1f1@1i4@1u0n7i4@1t1$3i4@1f1#2i4K6W2o6i4@1t1H3i4@1f1#2i4K6W2p5i4K6R3H3i4@1f1K6i4K6R3H3i4K6R3J5i4@1f1K6i4K6R3H3i4K6R3J5i4@1f1%4i4K6V1@1i4@1t1I4i4@1f1@1i4@1u0m8i4K6S2q4i4@1f1%4i4@1q4o6i4K6V1@1i4@1f1^5i4K6R3H3i4K6R3#2i4@1f1@1i4@1t1&6i4K6S2n7i4@1f1#2i4K6R3&6i4K6S2p5i4@1f1&6i4K6R3#2i4K6S2p5i4@1f1%4i4@1u0p5i4@1q4q4i4@1f1^5i4@1u0r3i4K6R3%4i4@1f1%4i4K6S2q4i4@1q4r3i4@1f1#2i4@1p5J5i4K6R3K6i4@1f1#2i4K6S2r3i4K6V1^5i4@1f1&6i4K6R3%4i4K6S2r3i4@1g2r3i4@1u0o6i4K6S2o6i4@1f1$3i4K6R3&6i4K6R3H3i4@1f1@1i4@1u0n7i4@1p5#2i4@1f1#2i4K6W2n7i4@1u0q4i4@1f1@1i4@1t1^5i4@1q4p5i4@1f1$3i4K6V1^5i4@1u0q4i4@1f1%4i4@1p5@1i4@1u0m8i4@1f1%4i4K6W2m8i4K6R3@1i4@1f1$3i4K6V1^5i4@1q4r3i4@1f1J5i4K6R3H3i4K6W2o6i4@1f1%4i4@1u0o6i4K6V1$3i4@1f1^5i4@1q4r3i4K6V1I4i4@1f1%4i4K6V1@1i4@1p5^5i4@1f1$3i4K6R3^5i4@1t1%4i4@1f1#2i4K6S2r3i4K6V1^5i4@1f1&6i4K6R3%4i4K6S2r3i4@1f1J5i4K6R3H3i4K6W2p5i4@1f1#2i4@1q4r3i4@1t1&6i4@1f1^5i4@1q4r3i4K6W2p5i4@1f1$3i4@1p5I4i4K6R3$3i4@1f1K6i4K6R3H3i4K6R3J5
如果您用WinDbg附加到任意一个进程时,输入命令“.sympath”如图1-23所示,那么说明符号已经设置成功了。
图1-23
3.2. 实体机双机调试环境搭建
下面我们介绍实体机的双机调试,这部分只介绍使用串口进行双机调试的方法。通过网络双机调试方法和下面“VMware双机调试环境搭建”大部分是一样的,只不过实体机双机网络调试用的是真实的网络设备而已。
首先,用Null-modem线或者2,3口交叉的RS232线将两台实体机连接起来。然后开机,分别在“设备管理器”中查看“端口”。如图1-24所示,左边是调试机,已经把另一端的被调试机主机串口识别为COM2;右边是被调试机,把调试机主机的串口识别为COM1。
图1-24
下面,设备双方串口的波特率,我们以调试机为例。在“设备管理器”的“端口”项中右键单击“通信端口”,“属性”,然后选择“端口设置”选项卡,如图1-25。
图1-25
然后将选项卡中的内容选择和图1-25一样,单击确定后保存退出。被调试机也是这样设置,并且一定要和调试机设置成一样的配置。然后两台实体机分别打开HyperTerminal,选择对方的端口进行通信,如果双方信息的收发都没有问题,那么恭喜您,串口已经能正常通信了。
如果两台实体机之间能稳定通过串口通信,那么下面还需要配置被调试机。笔者被调试机系统版本是Windows 10 14393 rs1,我们需要修改系统的BCD来完成被调试机一端的配置。下面的配置过程都是在命令提示符中操作的。
首先,先设置被调试机的Root Partition(Windows 内核)部分的配置。输入以下命令。
上面三句分别为:设置调试中用于通信的文件;设置调试方法为串口调试,并且使用com1口(这里的com1端口,便是上文中被调试机识别出的调试机端口号)作为调试端口,波特率为115200;设置调试开关为开启。
下面是设置Hypervisor层代码调试的配置。命令如下。
上面语句用来设置Hypervisor层代码由com1口作为调试端口,设备波特率为115200,并开启Hypervisor层代码的调试开关。
如果上面的命令都成功的执行,便可以开始设置调试机配置了。
首先,在调试机上新建一个connect.bat文件,打开编辑器,输入下面代码。
然后保存退出编辑器。
这个命令的意思是,打开串口号为com2的串口,并且自动设置波特率,然后创建两个管道文件,分别供Hypervisor代码和Windows内核代码调试用。
下面新建一个快捷方式,在“请键入对象的位置”中填入“"C:\Program Files (x86)\Windows Kits\10\Debuggers\x64\windbg.exe" -k com:port=\\.\pipe\vm0,baud=115200,pipe,reconnect”。“"C:\Program Files (x86)\Windows Kits\10\Debuggers\x64\windbg.exe"”部分是WinDbg的地址,然后跟的是参数。这些参数意思是,开始内核调试,并通过端口“\\.\pipe\vm0”,波特率为115200。这里面“\\.\pipe\vm0”便是vmdemux.exe创建的管道文件,vm0用于调试Hypervisor层代码用。最后将快捷方式重命名为“hypervisor”。
再新建一个快捷方式,和上面一样,但是这次在“请键入对象的位置”中填入“"C:\Program Files (x86)\Windows Kits\10\Debuggers\x64\windbg.exe" -k com:port=\\.\pipe\vm1,baud=115200,pipe,reconnect”。这个用来调试Windows内核代码,并将快捷方法重命名为“kernelroot”。
到此,双机调试的准备已经完成了。下面要先运行connect.bat然后在运行两个快捷方式“hypervisor”和“kernelroot”。开启被调试机电源,观察WinDbg的回显。
如图1-26所示,双机环境便搭建完成了,调试机可以随时中断被调试机的运行。
图1-26
3.3. VMware双机调试环境搭建
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课