Windows驱动调试

windows驱动调试之WinDbg双机调试

记录一次windows驱动的调试过程,包括环境的搭建,驱动签名。

(一)调试环境准备

  • WinDbg调试工具官方下载地址:
    WinDbg Preview(最新版):https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/debugger-download-tools

    通过wdk安装WinDbg :https://docs.microsoft.com/en-us/windows-hardware/drivers/download-the-wdk

  • 调试准备
    WinDbg的双机调试,需要准备两台设备,其中目标机用于运行编译好的驱动,调试机用于编写驱动以及运行WinDbg调试工具。
    目标机:Windows 2008 R2 Server(虚拟机)
    调试机:Windows 10 专业版(实体机)

(二)调试环境搭建

1、调试机环境
  • WinDbg安装(WDK)
    (1) 下载完成wdk 19041.685.201201-2105.vb_release_svc_prod1_WindowsSDK.iso 后,解压该镜像文件。
    Windows驱动调试
    (2) 运行 winsdksetup.exe , 默认选择到 " Select the features you want to download " 页面,仅选择 Debugging Tools for Windows,如下图所示:
    Windows驱动调试
    (3) 最后点击Download,等待安装完成。
    Windows驱动调试
2、目标机环境

(1) 在VMware Workstation Pro上新建Windows 2008 R2 虚拟机,安装完成后在 VMware 中选择:虚拟机 -> 设置,打开虚拟机设置,在设备中如果存在 “打印机”,则移除该设备。当移除打印机设备后,选择 添加 添加串行端口设备。如图:
Windows驱动调试
串行端口的配置:如上图所示。
注:删除打印机设备好像是因为会和串行端口发生冲突(???,具体原因没有去了解,反正也用不到)
(2) 目标机开启调试模式

  • 方法一:以管理员权限打开目标机的CMD,输入以下命令。
bcdedit /debug on			// 开启调试模式
bcdedit /dbgsettings serial debugport:1 baudrate:115200 // 设置调试端口以及波特率
bcdedit /dbgsettings 		// 查看设置
重启系统后生效

------------------------------------------
bcdedit /?           // 查看bcdeidt指令相关参数和用法
  • 方法二:运行/CMD,输入 msconfig 运行,选择 引导 -> 高级选项,在 引导高级选项中,勾选 调试,并在全局调试勾选 调试端口,以及 波特率,分别设置为 COM1:115200,确定后重启生效。如下图所示:
    Windows驱动调试
    Windows驱动调试
3、驱动签名
  • 驱动编译
    a. 采用的是WDK中Windows Driver Kits的x64 Checked Build Environment,在命令窗口 cd 到驱动源代码目录下执行 build 编译的驱动,会生成 .pdb 文件(很重要)以及 .sys 文件等
    b. 其余过程…略过

  • 驱动签名
    a. 签名软件:亚洲诚信数据签名工具 下载地址:https://www.trustasia.com/?f=dsigntool
    b. 将签名软件安装到调试机上后(所有选项默认即可),再安装相应的证书(我这里安装的是VeriSign Class 3 Public Primary Certification Authority - G5.cer)
    c. 打开数字签名工具,签名规则 -> 添加,规则名称任意,选择证书后确定。
    Windows驱动调试
    d. 规则添加完成后才可对 .sys 文件进行数字签名,选中编译出来的 .sys 文件,点击鼠标右键:数字签名 -> 内核模式。

  • 驱动的安装
    …略(可以通过.inf文件安装驱动)

  • 注:驱动源文件存放路径不要有中文以及目录名称不要带空格

(三)WinDbg双机调试

  • 在目标机上安装驱动

  • 打开WinDbg连接目标机,File -> Kernel Debugging -> COM / Ctrl + K,按照之前对目标机串行端口配置和调试模式配置填写。
    Windows驱动调试

  • 在 Kernel Debugging 中确定后,在导航栏中点击 Break 或 Ctrl + Break 显示如下 。
    Windows驱动调试

  • 待加载完成后,设置符号文件(.pdb)、源文件、镜像文件路径,所有文件均存在于调试机上。File->Symbol File Path…/Source File Path … / Image File Path,或使用快捷键 Ctrl + S / Ctrl + P / Ctrl + I。如下图所示。
    Windows驱动调试
    符号文件路径设置: 驱动编译是生成.pdb文件的路径,其中C:\Symbols*http://msdl.microsoft.com/download/symbols表示可从微软下载部分驱动的.pdb文件到C:\Symbols目录下,其中自定义的pdb文件路径用‘ ; ’ 分割
    Windows驱动调试
    源文件路径设置: 设置驱动文件源文件的路径。
    Windows驱动调试
    镜像文件路径设置: 设置驱动文件镜像文件的路径。

  • 完成配置后,只需要点击 ‘ok’ 即可。
    Windows驱动调试

  • 确认路径无误后,在WinDbg命令行执行 .reload ,重新加载
    Windows驱动调试

  • 加载完成后执行 lm m xxx(模块名) 显示出程序运行加载的模块信息, 或者执行 !lmi xxx(模块名) 查看模快的详细信息,或 !db xxx(模块名) 比 !lmi 更详细。
    Windows驱动调试

  • 模块和模块链接加载完成后,可根据驱动源码打断点,如 bu/bp xxx(模块名)!DriverEntry,在驱动入口函数打断点。

bu :  设置断点
bl : 查看断点
bc :  删除断点
  • 完成上述操作即可开始调试

WinDbg指令:
Windows调试器命令:https://docs.microsoft.com/zh-cn/windows-hardware/drivers/debugger/

上一篇:茫茫内存,我该如何用 windbg 找到你 ?


下一篇:windbg配置网络版双机调试