Windows 双机调试、驱动开发
1 Windows 10双机PD搭建调试
被调试系统:Windows x86 21H2
主机:Windows 10 x64 21H2
在被调试系统里:
设置系统调试选项
1
2
3
4
5
6
7
8
9
10
11// 1.设置端口1(该处的“1”,对应com接口1)
bcdedit /dbgsettings serial baudrate:115200 debugport:1
// 2.复制开机选项(这里我命名为:"DebugMe",可任意修改)
bcdedit /copy {current} /d DebugMe
// 3.增加开机引导项(ID填写上一条命令生成的字符串)
bcdedit /displayorder {current} {ID}
// 4.激活debug(ID填写上上一条命令生成的字符串)
bcdedit /debug {ID} ON关机。
设置-硬件-添加串行口-com1-客户端。
设置单核。
主机:
- 关机。设置-硬件-添加串行口-com1-服务器。
- 开机。在Windbg快捷方式右键设置启动参数:
"C:\Program Files (x86)\Windows Kits\10\Debuggers\x86\windbg.exe" -b -k com:port=com1,baud=115200,reconnect -y。 - Clash梯子搭好
- Profiles:到GlaDOS复制链接粘贴后,点击Download,然后选择刚下载的配置。
- General:勾选“System proxy”、“Start with Windows”,并记好“Port”是多少。
- Edge浏览器直接测试Google能否访问。
- Windows环境变量,在用户变量下添加
- 在本地先随便建立一个空文件夹,如
C:\Symbolsx86。 - _NT_SYMBOL_PATH:C:\Symbolsx86。
- _NT_SYMBOL_PROXY:127.0.0.1:Port。
- 在本地先随便建立一个空文件夹,如
- 打开Windbg,设置符号路径
srv*C:\Symbolsx86*https://msdl.microsoft.com/download/symbols。- 关闭防火墙。
- 设置符号链接:
.sympath srv*C:\Symbolsx86*https://msdl.microsoft.com/download/symbols(https不是http)。 - Windbg命令行输入:!sym moisy(查看下载时的日志)。
- Windbg命令行输入:.reload /f。查看C:\Symbolsx86已经下载好了一些.pdb符号了(如果一次不成功就重启Windbg,多试几次),可以时不时的进行reload。
参考:双机内核调试入门。
2 VS 2019 开发驱动环境安装
本机系统版本:Windows 10 教育版本,版本号21H2,内部版本19044.1889。安装步骤参考:https://docs.microsoft.com/zh-cn/windows-hardware/drivers/other-wdk-downloads
安装 VS 2019(安装 Visual Studio 时,选择“使用 C++ 的桌面开发”工作负载。 Windows 10 软件开发工具包 (SDK) 会自动包括在内,并显示在右侧的“摘要”窗格中。)所以在安装VS 2019时选中如下图。
![1.png]()
打开VS 2019,找到如下图,进去之后安装下面第二个图的组件,参考vs2019+wdk10开发 xp, win7, win10 驱动。
![2.png]()
![3.png]()
安装 WDK,注意安装的 WDK 版本要和 SDK 版本一致。如下图在“控制面板-卸载程序”找到第一步安装 VS 2019 时安装的 SDK 版本。然后到其他 WDK 下载安装如下第二图的 WDK。
![4.png]()
![5.png]()
安装好 WDK 后,点击“Close”前,勾选上安装 WDK 的扩展,然后会安装 WDK VS(这个东西就是让每次使用VS 2019创建项目时能够选择创建驱动程序),如果没有自动安装,可以到存放 WDK 得目录下找到WDK.vsix双击安装—vs2017安装驱动环境,安装wdk.vsix插件采坑指南。
安装好 WDK 后,到“控制面板-卸载程序”查看 WDK 和 SDK 版本是否对应上,如上面第二张图都是10.0.19041.685。
3 开发 Windows 10 平台 x64 驱动
新建Empty WDM Driver项目。
在“Resource Files”右键添加新建项,新建
.c文件。修改项目属性:
项目属性-Driver setting-General-Target OS Version:Windows 10,Target Platform:Desktop。
![6.png]()
项目属性-Inf2Cat-General-Run Inf2Cat:否。
![7.png]()
项目属性-Driver Sining-General-Sign Mode:Off(Windows 10:Test Sign)。
![8.png]()
项目属性-C/C++-常规-警告等级:3,将警告视为错误:否。
![9.png]()
项目属性-链接器-常规-将链接器警告视为错误:否。
![11.png]()
WDM 模式开发驱动报错:*error 1297: Device driver does not install on any devices, use primitive driver if this is intended.*。
删除 Driver Files—.inf 文件如下内容:
1
2
3
4[Manufacturer]
%ManufacturerName%=Standard,NT$ARCH$
[Standard.NT$ARCH$]禁用驱动数字签名!!!!!!参考:win10虚拟机环境下运行驱动程序
按下win+i 组合键打开windows 设置,点击“更新和安全”;
2、找到恢复,点击“高级启动”下的“立即重启”,重启电脑;通过点击 开始菜单 ,按下shift 点击 电源 – 重启可达到同样效果;
3、重启win10后在高级界面选择“疑难解答”;
4、选择“高级选项”;
5、接着点击“启动设置”;
6、点击重启,会进入到启动设置界面;
出现如下这个界面,再按F7键则禁用签名成功,不过以上的步骤只能临时的禁用驱动数字签名,重启后失效,需要永久禁止的话各位还是需要研究一下第一种方案DbgView无法输出!!
不要包含
windows.h头文件。
关于 DebugView 输出:
- 在 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SessionManager 下新建文件夹 Debug Print Filter。
- 新建键值对:Default: 0xF。
- 管理员模式运行 DebugView :勾选上 Capture Kernel 和 Enable VerBose Kernel Output。
1 |
|
4 在项目中创建文件夹
创建项目。
项目—显示所有文件。或点击下面图标。
![11.png]()
选中项目—右键—添加—新建文件夹(不是选中解决方案)。
![12.png]()
在新建的文件夹中新建文件即可。
F7 编译,然后就可以在本地文件目录中看到新的文件夹和文件了。
![13.png]()
以后凡是新建文件夹/文件都需要切换到显示所有文件的模式下。
5 将 .pdb 中的符号导入 IDA
有两种方法将微软在 .pdb 中提供的调试符号导入到 IDA。
方法一:使用 IDA 自带的工具。
使用 IDA 自带的工具,如目标设备是 64 位:
/dbgsrv/win64_remote64.exe。在目标系统上运行该程序之前,需要在环境变量中中添加:- 变量名:_NT_SYMBOL_PATH 。
- 变量值:C:\Symbolsx64\ntkrnlmp.pdb\87A327C6C356B7E2BAC1D75E779701651(
C:\Symbolsx64\ntkrnlmp.pdb\87A327C6C356B7E2BAC1D75E779701651/ntkrnlmp.pdb)。
然后再 IDA 中:File——Load file——PDB file。
这种方式导入的符号不完整,有时候在 IDA 中添加结构类型时,会识别不到,推荐使用方法二。
方法二:使用工具Symbol Type Viewer,有两种常用的方式。
- 一种是生成 C 语言的头文件
xxx.h。 - 一种是生成 IDA 用的脚本文件
xxx.idc。
进行如下配置:
![77.png]()
生成如下文件:
![78.png]()
将生成的文件导入 IDA 中:
.h文件:File——Load file——Parse C header file。.idc文件:File——Script file。
- 一种是生成 C 语言的头文件














