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 后,解压该镜像文件。
(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/
Windows驱动调试相关推荐
- Windows驱动开发学习笔记(二)—— 驱动调试内核编程基础
Windows驱动开发学习笔记(二)-- 驱动调试&内核编程基础 基础知识 驱动调试 PDB(Program Debug Database) WinDbg 加载 PDB 实验:调试 .sys ...
- Windows Mobile中使用WinCE驱动调试助手的小技巧
驱动调试助手是针对Windows CE做的,在Windows Mobile中使用会有一些问题,最主要的就是其菜单栏被Windows Mobile系统的任务栏给遮住了,导致相应的功能无法正常使用,如下图 ...
- VMware调试.【转】VMware+Windgb+Win7 内核驱动调试
ZC:我遇到的问题:com_1 怎么都不成功,记起来 貌似原来也遇到过这个问题,看了一下 VMware里面创建的是 "串行端口 2",于是 将 "com_1"改 ...
- windows双机调试
目标计算机(windows 7 串口调试): 1. 管理员帐号登陆 2.设置调试方式 串口参数 bcdedit /dbgsettings serial baudrate:115200 debugpor ...
- 配置windows驱动开发环境
配置windows驱动开发环境 撰写:jiftle 时间:2011-09-09 14:30 windows驱动开发需要wd ...
- WinCE驱动调试助手V2.5
http://www.cnblogs.com/we-hjb/archive/2008/12/15/1280822.html http://blog.chinaunix.net/u1/49088/sho ...
- windows驱动开发学习
序言] 很多人都对驱动开发有兴趣,但往往找不到正确的学习方式.当然这跟驱动开发的本土化资 料少有关系.大多学的驱动开发资料都以英文为主,这样让很多驱动初学者很头疼.本人从 事驱动开发时间不长也不短, ...
- Windows编程—Windows驱动开发环境搭建
文章目录 前言 步骤 步骤一 步骤二 步骤三 连接测试 步骤四 步骤五 总结 前言 作为一个编写Windows程序的开发人员,对Windows驱动开发 并非必需要掌握,但是掌握 Windows驱动开发 ...
- 请wince驱动调试助手的作者sunrain_hjb以及wince开发者进来看看
作者:gooogleman(www.gooogleman.com站长) 时间:2011-05-09 09:43:54 嘿嘿,也有一阵子没有来这里了,即使来了也瞄一眼就走了,时间改变了太多事情了. ...
最新文章
- JAVA编程语言的基础知识(六)
- 科大星云诗社动态20210811
- 开了gomod不识别gopath_笔记本电脑开不了机原因 笔记本电脑开不了机解决方法【图文】...
- codeforces229 D. Towers(dp+贪心)
- CompletableFuture详解~acceptEither
- 系统架构师学习笔记-数据通信与计算机网络(一)
- 微成本搭建企业高效沟通平台
- php分布式缓存系统 Memcached 入门
- 字符串转小写 c语言库函数,c++字符串大小写转换
- 是什么让Go语言更适合人工智能研究?
- CF-1099 D. Sum in the tree
- IE11降级为IE8的方法
- 游戏开发者如何有效的编写游戏策划文档
- @Qualifier的作用和应用
- 利用XSLT来换XML的根
- 三轴加速度传感器角度值转换原理
- MySQL基本增删改查以及搭配node在项目中的操作
- 2022《中国企业敏捷实践白皮书》调研全面启动
- 投影仪硬件边缘融合服务器,带你了解投影融合的边缘融合显示技术
- Building a Restful Web Service(最好的Spring入门教程 --来自Spring官网的Guides)
热门文章
- 来看看黑五小齐都买了什么好东西?
- 微博粉丝清理工具丨2023年最新粉丝批量清理_微博怎么批量清理粉丝
- html中的audio标签
- 百度的科学计算器(简单)
- [转]Navicat 10 for MySQL 注册码
- Django数据库——迁移命令
- 给前端快速上手摸鱼一把主流状态管理库,这家伙真香
- python爱好者社区公众号历史文章合集_GitHub - acherie/weixin_crawler: 高效微信公众号历史文章和阅读数据爬虫powered by scrapy...
- java项目横向越权,水平、垂直权限问题(横向越权与纵向越权)
- 模拟技术走向台前,它能帮自动驾驶汽车抄个近路吗?...