windbg+网线双机调试windows内核驱动

最近要调试bluetooth,涉及到具体硬件因此不能用虚拟机和命名管道调试内核了,另外现在的PC追求轻便化,因此连串口都没了,不得不考虑使用网线调试。网上转了一圈发现了这篇:基于网络的内核调试 

    驱动调试需要用到两台机器,目前主要是通过串口、usb或者1394接口来连接。对于软设备驱动来说就多了一种选择,通过vmware等虚拟化软件来虚拟测试机。但有些情况下必须在真实的双机环境进行,如真实设备驱动的调试,以及其他驱动无法在虚拟机上运行的情况,这时就要考虑用什么接口来连接了。串口的优点是它属于标配,几乎每个PC主板上都有,串口线也便宜,另外就是所有的windows系统都支持串口调试,所以很多同行都用串口进行驱动调试,但它有个缺点速度慢,最快也只能达到115200。Usb和1394的速度比串口速度快,但要找到合适的usb线也不容易,1394就更难了。在这样的情况下,如果可以通过网络进行双机调试一定会是很好的调试体验。

    很可惜,想要通过网络进行驱动调试也是有要求的。为了叙述方便我们先明确两个概念。

    1. 目标机,指的是安装和运行被调试驱动的机器。

    2. 宿主机,运行调试器对目标机进行调试的机器。

    要通过网络进行驱动调试,需要满足以下几个方面的要求:

    1. 目标机和宿主机的网卡要支持这种调试。

    2. 目标机操作系统必须是win8或者windows server 2012,关闭安全启动。

    3. 宿主机操作系统可以使XP或者更高版本的系统。

    条件是苛刻了点,但随着win8的普及,相信使用这种方法进行驱动调试的人会越来越多。接下来进入本文的重点,调试环境的配置。


    1. 用ipconfig以及ping命令确定目标机和宿主机的IP以及网络连接情况(注意关闭防火墙)。

    2. 选择一个宿主机和目标机都要用到的网络端口port,你可以在49152-65535这个范围选择,确保你选择的端口没有被其他进程占用。

    3. 在目标机上以管理员身份打开“命令提示符”窗口,输入此命令以启动调试。

     (0) bcdedit   /set   {default}   DEBUG  YES

       (1)    bcdedit   /debug   on

       (2)    bcdedit  /dbgsettings   net   hostip:w.x.y.z   port:n 

         或者指定Key值   bcdedit   /dbgsettings   net   hostip:192.168.1.1  port:50000   key:1.2.3.4

    其中w.x.y.z表示宿主机IP,n表示刚才选择的网络端口。这个命令将会产生一个key,把这个key抄下来,等会要用到。

  4、  如果目标机有多个网卡,还需要执行如下命令:

    bcdedit   /set   {dbgsettings}   busparams   b.d.f 

    其中b为总线号,d为设备号,f为功能号,这些可以在设备管理器中查到。

 5、 win10上需要开启测试模式(开启后,禁用驱动签名在每次重启后依然有效)。

     5.1)bcdedit.exe -set TESTSIGNING ON

     5.2)bcdedit.exe -set loadoptions DDISABLE_INTEGRITY_CHECKS

6. 重启目标机。

7. 在主机上以管理员权限打开windbg,选择kernel debug下的net标签,填入选择的端口号和刚才的key,点击OK就可以开启调试会话。你也可以在命令窗口运行windbg -k net:port=n,key=Key 来开启调试会话。

================================================================================================

在目标机上以管理员身份打开“命令提示符”窗口,输入此命令以启动调试。
    (0)    bcdedit   /set   {default}   DEBUG  YES
    (1)    bcdedit   /debug   on
    (2)    bcdedit  /dbgsettings   net   hostip:w.x.y.z   port:n 
    或者指定Key值   bcdedit   /dbgsettings   net   hostip:192.168.1.1  port:50000   key:1.2.3.4
    其中w.x.y.z表示宿主机IP,n表示刚才选择的网络端口。(2)这个命令将会产生一个key,把这个key抄下来,
    等会要用到。
    
如果目标机有多个网卡,还需要执行如下命令:
    bcdedit   /set   {dbgsettings}   busparams   b.d.f 
    其中b为总线号,d为设备号,f为功能号,这些可以在设备管理器中查到。

win10上需要开启测试模式(开启后,禁用驱动签名在每次重启后依然有效)
    bcdedit.exe -set TESTSIGNING ON
    bcdedit.exe -set loadoptions DDISABLE_INTEGRITY_CHECKS

    4. 重启目标机。

    5. 在主机上以管理员权限打开windbg,选择kernel debug下的net标签,填入选择的端口号和刚才的key,
点击OK就可以开启调试会话。你也可以在命令窗口运行windbg -k net:port=n,key=Key 来开启调试会话。


bcdedit   /set   {default}   DEBUG  YES
bcdedit   /debug   on
bcdedit   /dbgsettings   net   hostip:192.168.1.10   port:50000
bcdedit   /set   {dbgsettings}   busparams   1.0.0
bcdedit.exe -set TESTSIGNING ON
bcdedit.exe -set loadoptions DDISABLE_INTEGRITY_CHECKS

pause

================================================================================================

后记:

我测试时发现

1.调试时两台PC机直连,设置静态Ip也可以进行调试。(关闭两端的防火墙)

2.如果目标机是win10 UEFI启动模式 网线调试可能会失效,一方面可能是因为受UEFI security boot影响,另一方面可能是因为厂商直接把网口调试功能给禁用了。

============================================================================================

调试环境搭建

用网线把目标机器和主机直连(交换机、路由器组网也行) ,并且手动为它们的有线网卡配制IP地址,且主机和目标机器IP地址必须

ipv4格式。

要求:被调试的目标机器必须是win8或是Windows Server 2012及以上系统

目标机器必须网卡支持才能进行网络内核调试,查询是否支持的方法:

打开设备管理器,找着网络适配器,找着本地的有线网卡右键属性然后选中详细信息选项卡,再在其属性

下拉列表框中选择硬件id,然后在 https://msdn.microsoft.com/zh- 

cn/library/windows/hardware/dn337010.aspx   上查询该网卡是否支持网络内核调试。

windbg+网线双机调试windows内核驱动_第1张图片
 

设置目标机器步骤

1 、在CMD下,以管理员权限分别执行命令

bcdedit   /debug   on

bcdedit   /dbgsettings   net hostip:w.x.y.z   port:n  key:1.2.3.4

w.x.y.z为调试端的IP地址,n为调试端的端口号.

如果执行第一条命令失败且提示信息为尝试修改调试程序设置出错。该值受安全引导策略保 护,无法进行

改或删除。解决办法是进入BIOS中,把“secure boot”设为“disable”.

2 、此时会生成一个key,在你网络调试中需要用到该key,所以把该值保存下来。当然该key也可 以指定

3、 bcdedit   /set   "{dbgsettings}"   busparams   b.d.f

b d f是在设备管理器中,选中网络适配器找到你要使用的有线网卡,然后在常规选项卡中,那个位置里b

为PCI总线,d为设备,f为功能。

windbg+网线双机调试windows内核驱动_第2张图片

4 、然后重启目标机器

主机端的话打开windbg,在File菜单下选择Kernel Debugging,然后切换到NET选项卡,正确填写端口号

和key的值点确定即可。

 如果windbg输出“KDNET protocol version unsupported.  You may need to upgrade your  

 debugger.”说明你用的windbg版本太低,需要用更新的版本。

 

最后一点 windbg连接的时间稍微有点长耐心等待即可。

你可能感兴趣的:(WDF)