上一篇介绍了“GDK7+NanoCode调试学习系列3–中断Linux驱动i915.ko”本篇继续学习:

  • 搭建使用Windbg通过NET来调试windows内核的环境;
  • 同时,搭建使用NanoCode通过DCI来调试windows内核的环境;

本篇没有具体的调试驱动步骤,主要搭建调试环境。

准备工作:

  1. 查看目标GDK7是否支持NET调试

    查看目标机的“系统信息”和对应的网卡设备的“硬件Id”,然后在 Supported Ethernet NICs for Network Kernel Debugging in Windows 10, Version 1909 (19H2) Build 18363 - Windows drivers | Microsoft Learn 上查询,说明支持NET调试。

  1. 设置目标机GDK7的调试选项

    可根据此链接(Set Up KDNET Network Kernel Debugging Manually - Windows drivers | Microsoft Learn)来设置,如下:

    • 目标机GDK7和调试主机在同一个网络下;

    • 查看调试主机的IPv4地址,必须是IPv4;

    • 目标机GDK7管理员打开cmd.exe,执行如下指令,同时记下生成的key;
      bcdedit /debug on
      bcdedit /dbgsettings net hostip:w.x.y.z port:n

      注:hostip是刚刚查询到的调试主机的IPv4

      注:port是调试主机使用的连接端口号,使用一个未被使用的,推荐50000 - 50039,使用netstat -ano | findstr 50000来查询

      执行完,会输出一个key,格式为x.x.x.x;官方推荐使用自动生成的key,但是也可以自定义,如下:
      bcdedit /dbgsettings net hostip:w.x.y.z port:n key:x.x.x.x

    • (可选)如果目标机有多个网络适配器,需要设置使用哪个网络适配器来调试,在网络适配器-属性-常规下看到b.d.f(总线.设备.功能),然后执行:
      bcdedit /set “{dbgsettings}” busparams b.d.f

    • 至此,目标机设置结束,重启目标机。重启后,看设备管理器-网络适配器多了一个:

开始调试:

  1. 使用Windbg来连接调试

    启动Windbg,选择内核调试-NET,填入上面设置的port和生成的key,确定执行;

不久,输出连接信息;

然后按下"Break",成功断下;

然后执行.reload, lm可以看到很多模块;

之后,可以使用命令来调试了~~~
  1. 使用NanoCode连接目标机

    在Windbg下执行g重启跑来目标机。下面继续在Windbg调试内核的情况下,使用NanoCode也连接调试目标机。

    启动NanoCode,选择“去调试”-内核调试:

点击确定之后,会自动连接并中断目标机;

执行.reload, lm也可以看到更多的模块了;

此时,我们可以查看一下kdnic的符号,执行x kdnic!*,输出很多符号。

  1. Windbg和NanoCode双管齐下

    至此,Windbg和NanoCode已经同时连接到一个目标机GDK7下,可以相互配合地调试了~

总结:

  1. 主要搭建使用Windbg和NanoCode同时调试一个目标机Windows的环境;

  2. 待续。。。

作者:沈根成  创建时间:2024-03-20 13:49
最后编辑:沈根成  更新时间:2024-04-26 11:30