windbg+vmware搭建驱动联机调试环境

Windbg+vmware 搭建联机调试环境

 

开发windows驱动程序的过程中,调试程序成了一个大问题,如果在自己本机上运行驱动程序,如果程序有误,会直接蓝屏,甚至会严重损坏系统,所以需要联机调试,如果没有两台机器的话,利用vmware来搭建调试和测试环境是一个非常好的选择。下面就介绍如果利用windbgvmware来搭建驱动的调试和测试环境。

 

一.需要的软件和环境

 

1.宿主机为windows7 64

2.Vmware-workstation 10

 可以在网上下载到,只要找到一个通用的序列号,也并非难事。

3.虚拟机:windows xp 专业版32

目前可以在网上直接下载到各种windows版本的虚拟机镜像文件,下载后只需要解压,利用wmware打开即可以使用,而省去了自己安装虚拟机系统的麻烦。可以在这个网址

http://cbmland.com/post/329/vmware-vmdk-images-shared.html

找到并下载所使用的虚拟机镜像文件,

 

4.windbg

 下载地址 这是windows的御用调试工具,可以用来调试应用程序,也可以用来调试内核代码。这里我们用它来调试windows驱动程序。

 

二.利用串口来搭建测试环境

 

1.为虚拟机增加串口设备

 

编辑虚拟机设置 添加 选择 串行端口 ,下一步 选择 输出到命名管道,下一步 命名管道名采用默认的名称就行,设置该端为服务器,另一端为应用程序,勾选 启动时连接,完成。

 

 



 

 

添加完成串口设备后,可以看到增加了一个串口设备,注意 使用的命名管道为\\.\pipe\com_1,这是默认的名称,最好不要改,当然也可以改成自定义 \\.\pipe\<comname>

注意:由于有打印机,打印服务占用了一个串口,新添加的这个串口是串行端口2COM2

 

 

启动虚拟机,打开设备管理器(开始 计算机 右键,选择 管理 设备管理器 ,找到通讯端口com2, 右键菜单中选择属性, 将每秒位数设置为115200,如图所示,确定退出。

 

2.设置虚拟机的系统启动项

开始 计算机,右键选择属性 高级 启动与故障恢复中打开 设置>  编辑 boot文件的末尾添加下面的内容,保存

multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional Debug" /fastdetect /debugport=com2 /baudrate=115200

注意:串口的名称为新添加的虚拟串口的名称,在这里是com2,别搞错了,上面的内容是一行,不要添加回车符

关闭虚拟机系统

 

 


三.Windbg配置

win7系统下安装windbg,采用默认的设置,一路next 安装即可,windbg不用自动创建快捷方式。

开始 搜索 windbg 找到windbg ,在桌面上创建一个快捷方式

右击windbg ,选择属性项 快捷方式,在目标框中 添加

-b -k com:pipe,port=\\.\pipe\com_1,resets=0

如果,自动改动了命名管道的名称,将com_1换成自定义的命称。

点击应用,确定

 

四.配置完成

启动虚拟机

选择debug模型进入系统,

以管理员权限运行windbg,

如果出现下面的界面,说明联机调试环境配置成功。

 

虚拟机系统启动过程会阻塞,在windbg中输入g,虚拟机系统继续启动。

 

到此为至,驱动的联机调试环境搭建完成。

 

 

 

五.调试驱动程序示例

我们从最简单的驱动程序入手 DriverTest.sys

驱动程序代码如下:

 

#include<NTddk.h>

VOID DriverUnload();

NTSTATUS DriverEntry(PDRIVER_OBJECT pDriver, PUNICODE_STRING pRegPath)
{
	KdPrint(("DriverEntry"));
	pDriver->DriverUnload = (PDRIVER_UNLOAD)DriverUnload;
	return STATUS_SUCCESS;
}

VOID DriverUnload(PDRIVER_OBJECT driver)
{
	KdPrint(("Unload Driver"));
}

按照之前的说明搭建好调试环境后,选用 windbg连上vmware,,如果虚拟机阻塞了,则在windbg中输入g命令,直到让虚拟机跑起来,把编译好的DriverTest.sys文件入放到虚拟机系统中,回到windbg,按 “ctrl + break”, windbg会让GuestOS暂停下来

 

 

输入命令 “bu DriverTest!Entry” 回车,可以在驱动程序的DriverEntry函数的入口点下一个延迟断点,其实bu的意思就是set unresolved breakpoint, windbg会记住这个断点,当这个驱动被加载了并且执行到这个地方,windbg会暂停GuestOS让你进行调试操作。

 

按下”ctrl + O” 打开源文件

 

还要设置符号路径。”ctrl + S”打开设置窗口,符号路径一般有两个,一个是你设置保存系统符号表(系统DLLPDB文件)的路径,另一个是你驱动程序的PDB路径(和生成的.sys文件在一个目录下),以分号隔开,注意勾选reload

 

windbg将这些东西加载完毕,输入“g,回车,让GuestOS跑起来。

GuestOS里运行加载工具InstDrv把我们的驱动加载起来,启动驱动。

 

InstDrv是一个加载NT类型驱动的小工具,操作非常简单,不用讲了。

windbg中可以发现程序已经在DriverEntry的入口处停了下来,我们可以进行源码调试了。

 

图中红色表示断点处,蓝色代码表示下一步将要执行的代码。

看一下windbg的工具类

 

 

从左到右依次是

打开 剪切 复制 粘贴

继续 重新开始 停止 调试 暂停

跳入 单步执行 跳出 运行到光标处

设置断点

命令行 查看内存 局部变量 寄存器 内存 栈 Scratch pad  进程和线程 

Command Browsers Source mode off/on

字体

选项

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值