使用WinDbg和虚拟机调试Windows驱动程序教程

windbg和虚拟机的远程、网络调试 windbg开启调试 阅读详情

驱动调试攻略(WinDbg)

驱动调试是一个系统级调试方式,所以调试工具用WinDbg是最佳选择。驱动调试一般情况下,需要两台电脑进行。一台作为主机进行驱动调试,另一台作为目标机进行驱动安装。当然如果没有多余的电脑,我们可以安装VMware模拟系统调试(虚拟机)。只是对电脑的配置要求比较高。本文介绍使用WinDbg及VMware进行调试的具体设置及方法。这些资料在网络很难找到,笔者也是吸取了他人很多宝贵意见才完成的,供大家学习讨论。其实用SoftIce可以单机调试驱动,但是有个问题就是在SoftIce启动前驱动可能已经启动了。

VMware Support 中说,自 4.0.18.0 版本之后的 WinDbg 都支持了通过 pipe 来进行调试,不过微软对此并没有任何说明。所以,在VMware中虚拟被调试的系统,然后通过VMware虚拟一个com端口。使用这个虚拟的端口,就可以用 WinDbg 进行调试了。

具体步骤如下:

1. 安装和设置WinDbg,VMware 

首先,请到微软官方网站

http://www.microsoft.com/whdc/devtools/debugging/default.mspx,下载最新版本的WinDbg工具,建议使用6.0以上版本的WinDbg做为调试工具。VMware也可以在网站上找到,当然使用高版本比较好。 安装过程比较简单,就不在此多做介绍。唯一要注意的是,安装完虚拟机后,请在VMware主菜单“VM”中选择“Install VM Tools…”,完成系统驱动文件的安装。

安装完这两个软件后,请在VMware中安装跟你的电脑版本相同的操作系统。例如:你的电脑安装的是WindowsXP Professional,那么最好在Vmware中安装相同版本。至少是相同的系统,Windows XPßà Windows XP、Windows 2000ßà Windows 2000。这样会在驱动调试过程中避免不必要的麻烦。笔者使用的操作系统为Windows XP Professional。

我们将使用电脑的COM1口最为调试口。

1.1设置 VMware 的虚拟com 

1.     运行 VMware ,点击 "Edit virtual machine settings"

2.     点击 "Add..." 来运行 VMware 的 Hardware Wizard  

3.     选择 "Serial Port",点 "下一步"

4.     选择 "Output to named pipe",点 "下一步"

5.     第一框里保持默认的 "\\.\pipe\com_1"
第二框里选"This end is the server." 
第三框里选"The other end is an application." 
选中 "Connect at power on" 
然后点击 "Advanced>>"

6.     选中 "Yield CPU on poll"(VMware Support 中提到了这一点),然后点完成。

7.     这样就完成了虚拟com的设置。

8.     重新启动一下。

1.2设置 VMware 虚拟出来的 guest os 

9.     编辑虚拟机中C盘根目录下的boot.ini文件。

在c:\下,可以找到boot.ini,可以用记事本打开它,或者命令行方式

C:\>attrib -s -h -r boot.ini
C:\>notepad boot.ini

我们需要在 guest os 的启动项上加些参数,才能够使用WinDbg调试它。我们可以在现有的行后面直接加参数,不过强烈推荐复制一个新行,在新行的后面加参数。这样在调试启动有问题的时候,我们可以方便的换回原来的启动方式。下面就是我改好的boot.ini。

在boot.ini文件中添加以下代码:(千万别留下空格)
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional-Debug" /fastdetect /debugport=COM1 /baudrate=115200

10.  在 guest os 的设备管理器中把com1端口的速度也就是"每秒位数"项,设为和上面一样的115200。

打开vmware中winxp的设备管理器,选择端口(com1), 双击这个"com1",在弹出的对话框中。

1.3设置真实系统(主机)com 

11.  回到我们的真实系统(主机)中,重复第10步。

1.4设置真实系统(主机)WinDbg 

12.  设置WinDbg的快捷方式,及其运行参数:

我们需要告诉WinDbg通过pipe进行连接和连接的速度。

可以在命令提示符(cmd.exe)下加参数-k com:port=\\.\pipe\com_1,baud=11520,pipe 运行WinDbg(VMware Support 中没有提到baud=11520 这个参数,其实这是个比较重要的参数)。(这个就不用设置了)

更方便的方法是在桌面建立一个WinDbg的快捷方式,在该快捷方式的属性,"目标"框中,加上参数 -k com:port=\\.\pipe\com_1,baud=11520,pipe 。这样运行这个快捷方式启动的WinDbg就完成了设置。参数的具体作用,可以参考 WinDbg 的帮助文件。

 在快捷方式的属性中,将目标(Target)改为:
"C:\Program Files\Debugging Tools for Windows\windbg.exe" -b -k com:pipe,port=\\.\pipe\com_1,resets=0

命令参数的意义:
-b:一旦主机目标机之间建立起连接,立刻中断目标机
-k:内核调试
Com:设置连接目标机的通信端口(此处为命名管道)和波特率(此处为115200)
-y:设置符号文件路径

13.  设置WinDbg参数

 现在我们假设你的驱动代码放在D:\mydriver目录中;系统级Symbol文件存放在C:\WINDOWS\Symbols目录中,这些Symbol文件是从微软的网站上http://msdl.microsoft.com/download/symbols下载而来,这个网址是不可以用IE直接打开的,WinDbgà Fileà Symbol File Path...界面中选择Reload,WinDbg会自动帮你下载;驱动生成的Symbol文件存放在D:\mydriver\objchk_wxp_x86\i386目录中。

a)     设置驱动Symbol路径,WinDbg->File-> Symbol File Path...为

SRV*C:\WINDOWS\Symbols*http://msdl.microsoft.com/download/symbols; D:\mydriver\objchk_wxp_x86\i386

b)     设置驱动源文件路径,WinDbg->File-> Source File Path…为D:\mydriver

c)     为了保险起见,我们同时设置系统变量。

My Computer -> Properties-> Advanced Tab-> Enviroment Variables-> 

Add._NT_DEBUG_BAUD_RATE=115200

_NT_SYMBOL_PATH=SRV*C:\WINDOWS\Symbols*http://msdl.microsoft.com/download/symbols

_NT_ALT_SYMBOL_PATH = D:\mydriver\objchk_wxp_x86\i386
_NT_SOURCE_PATH = D:\mydriver

14.  启动VMware,将主机目录C:\WINDOWS\Symbols下的拷贝到虚拟机的相同位置。同时请把驱动编译后生成在D:\mydriver\objchk_wxp_x86\i386目录下的*.pdb、*.sys、*.map、*.exp、*.lib文件一并拷贝到两个系统的C:\WINDOWS\Symbols目录中。

15.  重新启动VMware,并选择如图所示。这个时候先不敲回车键。

16.  在主机中运行之前设置好的WinDbg快捷方式。直到在WinDbg命令窗口中出现“Waiting to reconnect...”,此时打开VMware,敲回车键进入虚拟机。到这里所有的设置工作就全部完成了。

2.驱动安装及调试 

这里其大家注意,由于我们目前用的是虚拟机,所以安装驱动程序的时候一定要把VMware设置到全屏状态。

17.  编辑你要调试的源代码,在你需要调试的代码中添加硬断点。如果不添加硬断点,将没有办法进入所调试的程序中。具体方法如下:

在你需要调试的程序中加入以下代码: 

extern "C" {
#include <wdm.h>
//或者是#include <winddk.h>
}//放在文件开头
DbgBreakPoint();//放在需要调试的地方

重新编译驱动程序,记住一定要更新把重新生成的*.pdb、*.sys、*.map、*.exp、*.lib文件一并拷贝到两个系统的C:\WINDOWS\Symbols目录中。

18.  打开VMware,Ctrl+Alt+Enter进入虚拟机全屏模式。插入需要调试设备的硬件,笔者调试的目标设备为USB。当USB插入主机后,直接由VMware识别到这个USB设备,指定驱动位置,系统将会在你设置硬断点的地方停下来。这个时候你就可以回到WinDbg,进行单步调试了。你还可以在程序中添加软断点,“F9”或者“bp MyApp!MyFunction”。

3.两台电脑调试说明 

两台电脑调试跟借助VMware调试有所不同,不同之处有以下几个方面。

(1)       需要自己制作一条Null Modem Cable. 请参考以下电路。将两台电脑连接起来。

管脚信息说明: 

9-Pin NULL Modem Cabling 

3 2 Transmit Data 

2 3 Receive Data 

7 8 Request to Send 

8 7 Clear to Send 

6,1 4 Data Set Ready and Carrier Detect 

5 5 Signal Ground 

4 6,1 Data Terminal Ready 

 

25-Pin NULL Modem Cabling 

2 3 Transmit Data 

3 2 Receive Data 

4 5 Request to Send 

5 4 Clear to Send 

6 20 Data Set Ready and Carrier Detect 

7 7 Signal Ground 

20 6 Data Terminal Ready  

(2)WinDbg快捷方式参数设置

"C:\Program Files\Debugging Tools for Windows\windbg.exe" -b -k com:port=\\.\ com1,resets=0

原文地址http://wanderwarriorhsiao.blog.hexun.com/21784134_d.html

 

补充:我自己的调试心得

 

第一步:
安装完Windbg后,设置符号表 SRV*D:\sysmbols*http://msdl.microsoft.com/download/symbols 保存空间。

第二步:
先打开虚拟机 后打开windbg 再进入虚拟机中的Debug中
windbg中CRL+BREAK,后 g 命令 使虚拟机进入系统中去,


第三部:
在虚拟机系统中开启服务 net start XX
在windbg中 F9 命令设置断点后,g 命令进行调试, F10单步执行, g 命令全部执行完毕,进入虚拟机中停止服务 net stop XX ,则至此进行完一次DEBUG

windbg中CRL+BREAK 可以进行第二次调试 
g 命令后进入虚拟机中,开启服务,Windbg中设置断点,g 命令开始调试,以后步骤同上。


注意:关闭虚拟机后服务即停止,但是系统中还是有该项服务的。

 

超详细版Windbg内核调试配置教程(VMware+Win10) 手把手带你完成Windbg内核级调试环境搭建,涵盖VMware虚拟机串口配置、Win10目标机设置及Windbg符号路径调试技巧,确保每一步可复现、可验证,真正打通内核调试最后一公里。 阅读详情

相关推荐

Windows 内核之双机调试与windbg命令大全

在今后会有相当的实验环节,对于windows内核实验,调试环境是必不可少的,本章讲解双机调试的环境搭建与常见的WINDBG指令。 准备材料: VMware workstation : [https://www.vmware.com/go/downloadworkstation-cn] windows 7 x64 ISO (请使用种子下载工具进行下载): [ed2k://|file|cn_windows_7_ultimate_with_sp1_x64_dvd_u_677408.iso|34205573

玄道的网安博客 1340

WinDbg:调试之附加进程生成 dmp『二』

文章目录正文系列地址 简 述: 上一篇有些 WinDbg 的基础用法,本篇开始使用 WinDbg 附加进程调试,卡住崩溃后生成 dmp 文件。 本文初发于 “偕臧的小站”,同步转载于此。 正文 💻: win10 21H2 📎 WinDbg 10.0.22000.194 步骤如下 管理员运行 windbg.exe “File - Attach to a process…” 附加进程 此时按下 F5 开启调试 在附加的程序进行 UI 操作,等待崩溃中断,此时 WinDbug 界面

2643

VMware+WinDbg联合调试Windows驱动环境搭建

经过了好几天的挣扎,终于把VMware+WinDbg双机联合调试Windows驱动的环境,和调试方法搞通了。为了以后使用方便,特意单独写一篇文档。分以下步骤来搭建环境: 1.试验的环境  系统是XP,sp3。Vista的环境没有试验过。  笔记本,没有串口。  该实验是建立在早期报告基础之上的,默认你的系统已经安装了WDK(DDK),DriverStudio和相应的工具软件。如

Summon的专栏 4930

WinDbg-虚拟机-双机调试-驱动文件的调试

驱动文件的调试前言一、构建调试环境二、在要调试的驱动程序中下断点1.WinDbg中打开驱动文件2.在驱动程序中下断点三、准备调试1.在虚拟机中的操作系统中加载驱动文件2.在虚拟机中的操作系统中用vs打开三环程序准备调试四、开始调试1.vs中下断点后F5键启动调试。2.在要调试的函数中F11键进入函数内部3.WinDbg的其他窗口总结 前言 本文讲解用WinDbg和虚拟机调试驱动程序的具体过程。 不涉及WinDbg和虚拟机的配置问题。 调试环境为WinDbg+VMware+Win7 一、构建调试环境 以调

SHLYYY 1645

在MacOS上怎样远程调试PC的内核驱动程序

在macOS上远程调试Windows或Linux PC的内核驱动程序是一个复杂的过程,因为macOS并没有直接支持内核调试的工具。通常需要借助交叉调试工具链和虚拟化技术来实现

捕鲸叉的专栏 1327

windbg调试驱动学习总结

简单驱动编写与windbg调试 http://trustsec.blog.51cto.com/305338/64694/ 一.驱动编写 随着对windows系统的深入研究,越来越多的内核方面的知识被挖掘出来了,今天我们讨论下如何写一个 简单的驱动,并使用现在比较新的windbg调试器进行调试。首先写驱动要对驱动有一个比较全面的认识 。 一个简单的驱动一般有以下几

bcbobo21cn的专栏 4941

windbg远程调试方法

WinDBG的远程调试由服务端和客户端组成,和visualstudio类似。 被调试的机器是服务端(server), 我们做调试的机器是客户端(client)。 两台机器都需要安装WinDBG。 第一步, 建立WinDBG server 端。 使用 -server参数可以使WinDBG以服务器方式启动。 WinDBG可以用多种连接协议让客户端连接,比如命名管道(named pipe),安全

ytfrdfiw的专栏 1万+

C# 操作Excel的时候,出现"被呼叫方拒绝接受呼叫的异常"的解决方案(参考官方给出的解决方案)

首先官方有对这个错误给出解释和解决方案,连接如下: https://docs.microsoft.com/zh-cn/previous-versions/ms228772(v=vs.120)#%E5%8F%AF%E9%9D%A0%E7%BC%96%E7%A8%8B 简单来说,貌似是线程问题,我猜。。。 之前我尝试着在代码中添加 Thread.Sleep(1000); 来进行解决,这种办...

Ck_Max的博客 5767

使用WinDbg和虚拟机调试Windows驱动程序教程(转)

驱动调试攻略(WinDbg) 驱动调试是一个系统级调试方式,所以调试工具用WinDbg是最佳选择。驱动调试一般情况下,需要两台电脑进行。一台作为主机进行驱动调试,另一台作为目标机进行驱动安装。当然如果没有多余的电脑,我们可以安装VMware模拟系统调试(虚拟机)。只是对电脑的配置要求比较高。本文介绍使用WinDbg及VMware进行调试的具体设置及方法。这些资料在网络很...

weixin_33716154的博客 165

【流复制环境PostgreSQL-14.1到PostgreSQL-16.1大版本升级】

PostgreSQL大版本会定期添加新特性,这些新特性通常会改变系统表的布局,但内部数据存储格式很少改变。pg_upgrade通过创建新的系统表和重用旧的用户数据文件来执行快速升级。pg_upgrade升级主要有三种用法:1、使用pg_upgrade拷贝升级。2、使用pg_upgrade链接升级(带有- -link选项),- -link较快,但是启动新版本后修改了数据文件,再启动旧版本可能数据损坏,回滚较麻烦,所以尽量避免使用link参数进行升级。

小怪兽的博客 2925

ubuntu20.04 终端安装claude

【代码】ubuntu20.04 终端安装claude。

hongliyu_lvliyu的博客 2589

使用WinDbg和虚拟机调试Windows驱动程序

本文范围和说明: 本文只讲解具体的操作过程,不涉及详细的原理,若要深入了解,请参阅Debugging Help(Debugging Tools For Windows); 文中使用Virtual PC 2007作为虚拟机,但对于Virtual PC的其他版本或者VMWare都适用(VMWare设置命名管道的方式有点小不同)。 WinDbg更新很快,几乎月月有更新,下面是微软网站的下载链

winglet的专栏 5839

用C++手把手教你连接SimNow期货模拟盘:从CTP API封装到第一个订单(附完整代码)

本文详细介绍了如何使用C++连接SimNow期货模拟盘,从CTP API的基础架构解析到实现第一个订单的完整流程。内容涵盖CTP API的封装、SimNow环境配置、交易通道实现、行情接收与处理等核心环节,并提供完整代码示例,帮助开发者快速掌握量化交易中的期货模拟盘连接技术。

weixin_27215337的博客 327

【转帖】使用WinDbg和虚拟机调试Windows驱动程序

 使用WinDbg和虚拟机调试Windows驱动程序2008-10-08 09:40本文来自:http://blog.163.com/zhg_taohttp://www.cnblogs.com/suiyingjie/http://blog.163.com/zhg_tao/blog/static/84116744200862424215/http://www.cnblogs.

floweronwarmbed的专栏 5406

实测338MB/s!FPGA与CYUSB3014的Slave FIFO模式实战避坑(附完整固件与源码)

本文详细介绍了FPGA与CYUSB3014在Slave FIFO模式下实现338MB/s高速数据传输的实战经验。通过优化硬件设计、固件配置和GPIF II接口设置,解决了USB3.0双向通信中的关键性能瓶颈,并提供了完整的固件与源码参考。

weixin_30570101的博客 456

从 SOAUTH2 到系统用户,SAP AS ABAP 里配置 OAuth 2.0 Client 的完整落地思路

SAP OAuth 2.0客户端配置的核心在于建立系统级信任关系。在AS ABAP中,每个OAuth 2.0客户端必须关联一个System类型的用户账号(通过SU01创建),并建议采用业务语义明确的命名规范(如ZBTP_PO_APPROVAL_APP)。关键配置包括:客户端认证方式(推荐SSL证书而非共享密钥)、Token生命周期(默认3600秒)、Scope访问范围,以及根据应用场景选择Authorization Code或SAML 2.0 Bearer等授权模式。项目实践中应避免混合配置不同授权类型,而

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 984

Windows驱动程序Windbg调试方法[2]

1. 导言 这里主要记录的是以下操作系统配置双机调试的方法。 WindowsXP X86 Windows7的X86和X64 Windows10的X86和X64 使用的工具: Windows XP Professional X86 WDK8.1驱动开发包 Windbg 6.x VMWare Workstation Pro 所用驱动开发包均为WDK8.1,Windbg用的就是开发包内自带的那个版本。由于Win7与Win10配置双机调试方法不管机器位数都是一样的,所以这里只选择记录Win7的 2

輚至消亡 3830

【毕设级教程】从0到1实现基于YOLOv8的xView卫星图像目标检测系统(含UI界面,助力遥感智能毕设)

本文基于YOLOv8模型设计了一个面向xView卫星图像的目标检测系统。首先对xView数据集进行了格式转换处理,将原始多边形标注转换为YOLO格式的边界框标注。随后通过配置YOLOv8模型参数完成训练,实现了对卫星图像中建筑、车辆等多类目标的准确识别。为提高系统交互性,采用PyQt开发了可视化界面,支持图像选择、实时检测和结果展示功能。整个系统兼顾学术价值和实用价值,为遥感领域的自动化目标检测提供了可行方案。

m0_64661770的博客 130

利用VMWare和WinDbg调试驱动程序

利用VMWare和WinDbg调试驱动程序心里总感觉 SOFTICE 的发展快到末路了。果然在 2006 年时Compuare 宣布停止 SOFTICE 开发。这里消息确实令很多人心痛。但与此同时,Windows 的配套调试器 windbg , cdb 等不断更新,功能不断强大,你必须选择它,虽然它内核调试速度不理想。后来我知道了 syser debuger, 国人写的不错的调试器,基

FISH 的专栏 6770

数学建模算法案例精讲500篇-【深度强化学习】深度确定性策略梯度(DDPG)(附MATLAB和python代码实现)

它是一种学习连续动作的无模型策略算法。它结合了DPG(确定性策略梯度)和DQN(深度Q网络)的思想。它利用DQN中的经验重放和延迟更新的目标网络,并基于DPG,可以在连续的动作空间上运行。# 用于生成带有噪声的动作def __init__(self, action_space, mu=0.0, theta = 0.15, max_sigma = 0.3, min_sigma = 0.3, decay_period = 100000):#decay_period要根据迭代次数合理设置# 均值 mu。

qq_36130719的博客 323

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

使用WinDbg和虚拟机调试驱动程序

环境配置:——对文章作了些文字修改;——加入了使用VMware虚拟机配置的相关内容,而不是只根据个人喜好只写的Virtual PC的配置;——加入了虚拟机操作系统为Vista32的配置情况,Vista64后续有了调试经验后再加上;软件下载:WinDbg:http://www.microsoft.com/whdc/devtools/debugging/default.mspxVirtualPC:http://www.microsoft.com/downloadS/details.aspx?FamilyID=0

scut_su的专栏 1209

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Windows下怎样对其内部的Windows虚拟机进行内核驱动程序调试(基于源代码)

在Windows主机上调试运行在Windows虚拟机中的内核驱动程序是一种常见的开发和调试场景。使用WinDbg(Windows Debugger)可以实现这一目标。

捕鲸叉的专栏 973

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

双机调试和windbg的命令

啦啦啦

bilibili的博客 6397

利用WinDbg+Virtual PC调试驱动程序

最近在看《Windows驱动开发技术详解》一书,就想搭建一个Windows驱动程序的源码级调试环境。采用的软件主要是WinDbg和Virtual PC 2007,两者都是微软自家的东西,配合起来也相当默契。之前也曾用vmware装了一个Win XP SP3,但由于我的电脑配置一般

1180
上一篇: RHEL5启动模式
下一篇: vs2008+wdk配置驱动开发环境
cosmiccode
博客等级 码龄14年 1粉丝 2原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值