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驱动调试相关推荐

  1. Windows驱动开发学习笔记(二)—— 驱动调试内核编程基础

    Windows驱动开发学习笔记(二)-- 驱动调试&内核编程基础 基础知识 驱动调试 PDB(Program Debug Database) WinDbg 加载 PDB 实验:调试 .sys ...

  2. Windows Mobile中使用WinCE驱动调试助手的小技巧

    驱动调试助手是针对Windows CE做的,在Windows Mobile中使用会有一些问题,最主要的就是其菜单栏被Windows Mobile系统的任务栏给遮住了,导致相应的功能无法正常使用,如下图 ...

  3. VMware调试.【转】VMware+Windgb+Win7 内核驱动调试

    ZC:我遇到的问题:com_1 怎么都不成功,记起来 貌似原来也遇到过这个问题,看了一下 VMware里面创建的是 "串行端口 2",于是 将 "com_1"改 ...

  4. windows双机调试

    目标计算机(windows 7 串口调试): 1. 管理员帐号登陆 2.设置调试方式 串口参数 bcdedit /dbgsettings serial baudrate:115200 debugpor ...

  5. 配置windows驱动开发环境

    配置windows驱动开发环境                    撰写:jiftle 时间:2011-09-09 14:30                     windows驱动开发需要wd ...

  6. WinCE驱动调试助手V2.5

    http://www.cnblogs.com/we-hjb/archive/2008/12/15/1280822.html http://blog.chinaunix.net/u1/49088/sho ...

  7. windows驱动开发学习

    序言]  很多人都对驱动开发有兴趣,但往往找不到正确的学习方式.当然这跟驱动开发的本土化资 料少有关系.大多学的驱动开发资料都以英文为主,这样让很多驱动初学者很头疼.本人从 事驱动开发时间不长也不短, ...

  8. Windows编程—Windows驱动开发环境搭建

    文章目录 前言 步骤 步骤一 步骤二 步骤三 连接测试 步骤四 步骤五 总结 前言 作为一个编写Windows程序的开发人员,对Windows驱动开发 并非必需要掌握,但是掌握 Windows驱动开发 ...

  9. 请wince驱动调试助手的作者sunrain_hjb以及wince开发者进来看看

    作者:gooogleman(www.gooogleman.com站长) 时间:2011-05-09 09:43:54 嘿嘿,也有一阵子没有来这里了,即使来了也瞄一眼就走了,时间改变了太多事情了.    ...

最新文章

  1. JAVA编程语言的基础知识(六)
  2. 科大星云诗社动态20210811
  3. 开了gomod不识别gopath_笔记本电脑开不了机原因 笔记本电脑开不了机解决方法【图文】...
  4. codeforces229 D. Towers(dp+贪心)
  5. CompletableFuture详解~acceptEither
  6. 系统架构师学习笔记-数据通信与计算机网络(一)
  7. 微成本搭建企业高效沟通平台
  8. php分布式缓存系统 Memcached 入门
  9. 字符串转小写 c语言库函数,c++字符串大小写转换
  10. 是什么让Go语言更适合人工智能研究?
  11. CF-1099 D. Sum in the tree
  12. IE11降级为IE8的方法
  13. 游戏开发者如何有效的编写游戏策划文档
  14. @Qualifier的作用和应用
  15. 利用XSLT来换XML的根
  16. 三轴加速度传感器角度值转换原理
  17. MySQL基本增删改查以及搭配node在项目中的操作
  18. 2022《中国企业敏捷实践白皮书》调研全面启动
  19. 投影仪硬件边缘融合服务器,带你了解投影融合的边缘融合显示技术
  20. Building a Restful Web Service(最好的Spring入门教程 --来自Spring官网的Guides)

热门文章

  1. 来看看黑五小齐都买了什么好东西?
  2. 微博粉丝清理工具丨2023年最新粉丝批量清理_微博怎么批量清理粉丝
  3. html中的audio标签
  4. 百度的科学计算器(简单)
  5. [转]Navicat 10 for MySQL 注册码
  6. Django数据库——迁移命令
  7. 给前端快速上手摸鱼一把主流状态管理库,这家伙真香
  8. python爱好者社区公众号历史文章合集_GitHub - acherie/weixin_crawler: 高效微信公众号历史文章和阅读数据爬虫powered by scrapy...
  9. java项目横向越权,水平、垂直权限问题(横向越权与纵向越权)
  10. 模拟技术走向台前,它能帮自动驾驶汽车抄个近路吗?...