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 后,解压该镜像文件。
(2) 运行 winsdksetup.exe , 默认选择到 " Select the features you want to download " 页面,仅选择 Debugging Tools for Windows,如下图所示:
(3) 最后点击Download,等待安装完成。
2、目标机环境
(1) 在VMware Workstation Pro上新建Windows 2008 R2 虚拟机,安装完成后在 VMware 中选择:虚拟机 -> 设置,打开虚拟机设置,在设备中如果存在 “打印机”,则移除该设备。当移除打印机设备后,选择 添加 添加串行端口设备。如图:
串行端口的配置:如上图所示。
注:删除打印机设备好像是因为会和串行端口发生冲突(???,具体原因没有去了解,反正也用不到)
(2) 目标机开启调试模式
- 方法一:以管理员权限打开目标机的CMD,输入以下命令。
bcdedit /debug on // 开启调试模式
bcdedit /dbgsettings serial debugport:1 baudrate:115200 // 设置调试端口以及波特率
bcdedit /dbgsettings // 查看设置
重启系统后生效
------------------------------------------
bcdedit /? // 查看bcdeidt指令相关参数和用法
- 方法二:运行/CMD,输入 msconfig 运行,选择 引导 -> 高级选项,在 引导高级选项中,勾选 调试,并在全局调试勾选 调试端口,以及 波特率,分别设置为 COM1: 与 115200,确定后重启生效。如下图所示:
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. 打开数字签名工具,签名规则 -> 添加,规则名称任意,选择证书后确定。
d. 规则添加完成后才可对 .sys 文件进行数字签名,选中编译出来的 .sys 文件,点击鼠标右键:数字签名 -> 内核模式。 -
驱动的安装
…略(可以通过.inf文件安装驱动) -
注:驱动源文件存放路径不要有中文以及目录名称不要带空格
(三)WinDbg双机调试
-
在目标机上安装驱动
-
打开WinDbg连接目标机,File -> Kernel Debugging -> COM / Ctrl + K,按照之前对目标机串行端口配置和调试模式配置填写。
-
在 Kernel Debugging 中确定后,在导航栏中点击 Break 或 Ctrl + Break 显示如下 。
-
待加载完成后,设置符号文件(.pdb)、源文件、镜像文件路径,所有文件均存在于调试机上。File->Symbol File Path…/Source File Path … / Image File Path,或使用快捷键 Ctrl + S / Ctrl + P / Ctrl + I。如下图所示。
符号文件路径设置: 驱动编译是生成.pdb文件的路径,其中C:\Symbols*http://msdl.microsoft.com/download/symbols表示可从微软下载部分驱动的.pdb文件到C:\Symbols目录下,其中自定义的pdb文件路径用‘ ; ’ 分割
源文件路径设置: 设置驱动文件源文件的路径。
镜像文件路径设置: 设置驱动文件镜像文件的路径。 -
完成配置后,只需要点击 ‘ok’ 即可。
-
确认路径无误后,在WinDbg命令行执行 .reload ,重新加载
-
加载完成后执行 lm m xxx(模块名) 显示出程序运行加载的模块信息, 或者执行 !lmi xxx(模块名) 查看模快的详细信息,或 !db xxx(模块名) 比 !lmi 更详细。
-
模块和模块链接加载完成后,可根据驱动源码打断点,如 bu/bp xxx(模块名)!DriverEntry,在驱动入口函数打断点。
bu : 设置断点
bl : 查看断点
bc : 删除断点
- 完成上述操作即可开始调试
WinDbg指令:
Windows调试器命令:https://docs.microsoft.com/zh-cn/windows-hardware/drivers/debugger/