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

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

本文范围和说明:

本文只讲解具体的操作过程,不涉及详细的原理,若要深入了解,请参阅Debugging Help(Debugging Tools For Windows);

文中使用Virtual PC 2007作为虚拟机,但对于Virtual PC的其他版本或者VMWare都适用(VMWare设置命名管道的方式有点小不同)。

WinDbg更新很快,几乎月月有更新,下面是微软网站的下载链接:http://www.microsoft.com/whdc/DevTools/Debugging/default.mspx

正文:

在开发驱动程序时,调试是一件很头痛的事情,如果你在自己机器的操作系统上安装你要调试的驱动程序的话,可能一不小心就是一个Bug Check(蓝屏),这个时候,你可能要进安全模式,卸载你的驱动程序,甚至有可能你需要重新安装操作系统。解决驱动程序的调试,一个比较好的方案就是在你的物理机器上装上一个虚拟机,在虚拟机上安装你要调试的驱动程序,然后使用WinDbg在你的物理机器上调试你虚拟机上的驱动程序。大致的示意图如下:overview

基本的步骤分为三步:

1. 安装过程:在你的机器上安装安装虚拟机和WinDbg软件;

2. 配置过程:对你的WinDbg和虚拟机软件做一些必要的配置;

3. 调试过程:给出一个最简单的调试启动过程,不涉及复杂的内核调试技术;

一、 安装过程

首先,你需要在你自己的机器上安装虚拟机,我安装的是Virtual PC 2007,然后需要在你的虚拟机上安装好操作系统,操作系统的版本取决于你要在哪一个操作系统上调试你的驱动程序。虚拟机以及虚拟机操作系统的安装过程网络上针对VirtualPC或者VMWare都有很详细的资料。

然后在你的物理机器上装上WinDbg,我用的是写本文时的最新版:6.8.0004.0,可以按我给出的链接在微软的网站上去下最新版,好像安装过程也不是很复杂,没有什么特别的配置,在此不再赘述。

二、 配置过程

安装好软件以后,剩下的就是配置了。首先你要对你的虚拟机作如下的配置:

配置命名管道:你需要在你的虚拟机上建立命名管道,WinDbg通过此管道与你的虚拟机建立连接。给虚拟机配置命名管道的方法在虚拟机的帮助文档或网上很容易找到。以下给出Virtual PC 2007上建立命名管道的方法(so easy:))

打开Virtual PC 2007,点击”Action”->”Settings”,进入虚拟机的设置页面: settings

在虚拟机的设置页面中,选择”COM1”或者”COM2”,在右边的属性项中点选”Named Pipe”,然后指定一个管道名称,注意命名管道的名称格式,当虚拟机的物理机和你的调试机器是同一台机器时,管道名称格式如下:

//./pipe/your_pipename_whatever

virtualComPipe

给虚拟机配置好命名管道以后,还需要给虚拟机配置启动模式,以调试模式启动:

找到"C:/boot.ini"(%SystemRoot%)文件(别告诉我你找不到啊,嘿嘿),将此文件的只读属性去掉(右击文件,选择” 属性”,去掉”只读”的选项),用记事本和其他文本工具打开,加上如下启动选项:

/debug /debugport=com1 /baudrate=115200

注意这里的debugport指定的端口必须与你在上一步配置的命名管道的端口相同,至于baudrate,你可以指定为57600或115200,需要注意的是,物理机上该端口的baudrate值必须和你在这里指定的baudrate相同。配置如下图:

BootIni

至此,虚拟机的配置已完毕。

剩下的是物理机的配置,这个工作就比较简单了。

首先,安装WinDbg;然后,配置物理机COM端口的baudrate:“我的电脑”->(右键)”属性”->”硬件”->”设备管理器”,选择你在虚拟机上配置的相同的COM口,右击”属性”,配置COM的每秒位数值与你在虚拟机的/baudrate值相同。其他的值可以就用缺省值,如下图:

PcCom1

然后,配置WinDbg的启动选项,我喜欢做成一个批处理文件,bat(或cmd)文件内容如下:

windbg -k com:pipe,port=//./pipe/your_pipe_name

这里的your_pipe_name名称就是你配置的虚拟机的命名管道名称。把这个批处理文件放在你的WinDbg.exe所在的目录。然后就一切OK了。

三、 调试过程

首先,启动你的虚拟机,然后单击物理机上你做的那个bat文件,注意,如果这时候你的虚拟机还没有启动,单击bat文件会出现"系统找不到指定文件"的错误。这是因为你的虚拟机没有启动,或者你的虚拟机的COM口还没有准备好。不要紧,在虚拟机操作系统启动的过程中等个一两秒,再执行批处理文件,如果一切OK的话,WinDbg中会出现如下图所示的信息:

--------------------------------------------------------------------------------------------------------------------------------

Microsoft (R) Windows Debugger Version 6.8.0004.0 X86
Copyright (c) Microsoft Corporation. All rights reserved.

Opened //./pipe/my_pipe
Waiting to reconnect...
Connected to Windows XP 2600 x86 compatible target, ptr64 FALSE
Kernel Debugger connection established.
Symbol search path is: *** Invalid ***
****************************************************************************
* Symbol loading may be unreliable without a symbol search path.           *
* Use .symfix to have the debugger choose a symbol path.                   *
* After setting your symbol path, use .reload to refresh symbol locations. *
****************************************************************************

--------------------------------------------------------------------------------------------------------------------------------

此时,按住ctrl+break,你就可以挂起虚拟机操作系统,open你的source file,F9加入断点,你就开始你的驱动程序调试之旅了:)。如果你还想加入操作系统的调试符号,你需要将如下的值加入到你的WinDbg配置中:

在WinDbg中,"File"->"Symbol file path"中加入如下的值:

--------------------------------------------------------------------------------------------------------------------------

SRV*d:/winsymbols*http://msdl.microsoft.com/download/symbols

--------------------------------------------------------------------------------------------------------------------------

其中,d:/winsymbols就是你期望下载下来的符号的保存路径,因为是动态下载,所以要保证机器联网才行。

Lastly,enjoy your kernel debug journey!

windbg+virtualbox+win10双机调试 Windbg+VirtualBox双机调试环境配置(Win10) 一、下载WDK10 安装Windows驱动程序工具包(WDK) 10 这里可以直接安装,也可以下载安装包,我选择下载,选择路径,下一步。 下载好之后我们安装WDK 安装好了之后,Windbg就在C:\Program Files (x86)\Windows Kits\10\Debuggers\x64目录下 二、配置Win10虚拟机调试 1.关闭防火墙 “控制面板” -> “系统和安全” -> “Windows防火墙” -&gt 阅读详情

相关推荐

【文章阅读+代码复现】Point-GNN

Brief 在3D点云语义分割方法中,GNN已经做了很多可用的方案,但是在目标检测上依旧是采用比较传统的CNN和稀疏卷积的组合,这一篇文章是研究了图卷积在3D检测的中的用法。来自卡内基梅隆大学。已经被CVPR2020接收. 这里是 paper 这里是 code Abstruct 一个采用GNN设计的3D目标检测框架 过程是先将点云场景编码成图结构,随后设计了一个叫point-GNN的网络结构,在...

有所为,有所成长 1万+

win7/vista 下命名管道创建失败的解决

<br />最近写了一段windows下管道通信的代码,通过如下方式创建命名管道<br />HANDLE    hPipe = CreateNamedPipe(L"////.//pipe//testspipe",<br />         PIPE_ACCESS_DUPLEX | FILE_FLAG_OVERLAPPED, <br />         0, 1, 1024, 1024, 0, NULL);<br />这段代码在win xp/2003上表现良好,没有什么问题,可是到了win7上运行,就

vah101的专栏 8090

【脑电分析系列】第7篇:频域分析基石 — 功率谱密度(PSD)的计算与常见方法对比

本文探讨了脑电图(EEG)频域分析的核心方法——功率谱密度(PSD)。通过对比基于快速傅里叶变换的周期图法和更稳健的Welch's方法,指出后者通过分段、加窗和平均处理,能有效降低估计方差,更适合分析非稳态的脑电信号。文章详细解析了关键参数设置对频率分辨率和统计稳定性的影响,并提供了Python计算实现。PSD分析将复杂的脑电信号转换为直观的频域特征,为研究认知功能和神经疾病提供重要依据。

qq_32516809的博客 1799

Windbg waiting to reconnect 问题解决办法

在使用windbg对虚拟机进行调试的时候,发现出现waiting to reconnect的问题,经过网路中查询后知道。原来这是虚拟机serial port与虚拟机系统里的调试模式对应口不同造成的,com1对应serial port1,com2对应serial port2. 如图示,则在boot.ini中应设置/debugport=com2 若为Serial Port1,则设置为/

xbgprogrammer的专栏 4562

STM32驱动四位共阳极数码管实现高精度秒表计时器

本文详细介绍了如何使用STM32驱动四位共阳极数码管实现高精度秒表计时器。项目基于STM32F103C8T6最小系统板,通过定时器中断和GPIO控制,实现0.1秒精度的计时功能,并解析了共阳极数码管的动态扫描原理及按键消抖等关键技术。

n8m7b6v5c4的博客 951

实现高精度卷积混响--MATLAB仿真篇

一、前言 之前在STM32F407上现实了直播声卡,实现的经典Schroeder混响模型和Moorer混响模型,得到不错效果。后来得知卷积混响最为真实地表现空间的特性,所以也就尝试在MCU上实现一个高精度的卷积混响(卷积点数为32768),目前MCU出来的混响效果算得上一流水准,本人也在计划在ADI的21489或者SC584上更高精度的卷积混响。 二、卷积方式 1、conv1是使用MATLAB自带卷积函数conv 2、conv2和conv3是改进后卷积过程,具有减少运算量特点,方便嵌入式移植 clear;

Six44的博客 5073

解决Windbg的waiting to reconnect

所有的设置都已经完毕,虚拟机中的boot.ini设置完毕了,测试能够进入测试模式。于是我就开始配置Windbg,但是但我打开windbg之后,却一直都是在显示waiting to reconnect。这他妈的是在等谁呀,我上个厕所回来之后,还搁着儿等,于是我就开始寻找方案。原来你在虚拟机中的boot.ini写入的参数debugport的支必须要与虚拟机实际的串口名是一致的。         虚拟

hushengqiang的专栏 3485

WPS Office 2019 For Linux二次开发全流程:从源码下载到Demo运行

本文详细介绍了在Linux环境下进行WPS Office 2019 C++二次开发的全流程,涵盖从开发环境准备、源码获取、核心依赖(Qt与WPS)安装配置,到最终编译运行官方Demo的完整步骤。文章重点解析了环境搭建中的常见问题与解决方案,旨在帮助开发者快速上手WPS二次开发。

weixin_29001423的博客 388

Windows 驱动开发 之 WinDbg调试(一)

Windbg 调试课程相关笔记

Time Limit Exceeded on test 99 2011

YOLO11涨点优化:原创自研 | 魔改Bottleneck,具备多尺度和特征通道融合的结构

可以将C3k2_MSAMCS放在neck,或者backbone和neck同时修改,具体看自己数据集的涨点情况决定

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 1645

A2A 协议详解:Agent Card 的设计与实现

Agent Card 是 Agent2Agent (A2A) 协议中实现智能体发现与互操作性的核心组件。本文将深入剖析 Agent Card 的设计理念、关键字段及其在智能体生态系统中的作用。我们将通过详细的 JSON Schema 解析和 Python SDK 示例,帮助您理解如何精确地定义和发布智能体能力,为构建可发现、可协作的 AI 智能体奠定基础。当您使用a2a.Agent类初始化一个智能体时,SDK 会根据您提供的参数(nameversion等)自动构建内部的 Agent Card 表示。

加入“Super Entity”,与全能开发团队共探AI智能体与数字人项目,开启前沿技术之旅。 1473

【转帖】使用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

Linux Namespace隔离实战:dd/mkfs/mount/unshare构建终极沙箱

内存占用 | 512MB+ | **<10MB** | 50倍节省 || 启动时间 | 15-45秒 | **0.1-0.5秒** | 100倍加速 || 磁盘空间 | GB级 | **MB级** | 显著减少 || 系统调用性能 | 有损耗 | **原生速度** | 零损耗 |

Loving_enjoy的博客 398

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

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

CosmicCode 1353

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

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

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

捕鲸叉的专栏 973

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

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

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

weixin_33716154的博客 165

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

利用VMWare和WinDbg调试驱动程序

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

FISH 的专栏 6770

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

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

1180

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

WinDBG 配置内核双机调试

WinDBG 是在 windows 平台下,强大的用户态和内核态调试工具,相比较于 Visual Studio 它是一个轻量级的调试工具,所谓轻量级指的是它的安装文件大小较小,但是其调试功能,却比VS更为强大,WinDBG由于是微软的产品所以能够调试Windows系统的内核,另外一个用途是可以用来分析dump数据,本笔记用于记录WinDBG内核调试的配置过程,并附有常用命令的使用方法。6.接着回到物理机上面,我们在命令行中切换到WinDBG的根目录下,并执行以下命令,即可连接虚拟机串口进行调试了。

微软技术分享 8993

VirtualBox+Windbg 进行双机调试的方法

转载自http://www.cnblogs.com/nbsofer/archive/2013/01/02/2841513.html(女孩不哭) 以前见他们调试驱动程序之类的都是使用的VMWare, 我没怎么用这软件, 感觉这软件有点臃肿, 后台服务挂得太多了, 感觉不爽, 于是就没搞它. 加上电脑上很早就装有Oracle的Virtual Box, 于是就看了下, 其实Virtual B

Dream 1916

调试一个Windows内核驱动程序

我这里使用windbg来调试。

静下心来,做好每一件事 92
上一篇: 指定自定义属性不可用代码生成器赋值
下一篇: Fibonacci数列的非递归实现
winglet
博客等级 码龄21年 24粉丝 29原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值