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

环境配置:

——对文章作了些文字修改;
——加入了使用VMware虚拟机配置的相关内容,而不是只根据个人喜好只写的Virtual PC的配置;
——加入了虚拟机操作系统为Vista32的配置情况,Vista64后续有了调试经验后再加上;

软件下载:

WinDbg:http://www.microsoft.com/whdc/devtools/debugging/default.mspx

VirtualPC:http://www.microsoft.com/downloadS/details.aspx?FamilyID=04d26402-3199-48a3-afa2-2dc0b40a73b6&displaylang=en

VMware: www.google.cn/search?keyword="VMware Cracked Download :)"

正文:

在开发Windows驱动程序的时候,是需要使用双机调试的。而使用虚拟机调试,则至少可以获得以下好处:

  • 不需要另外一台额外的物理机,省钱才是King Road!
  • 调试驱动需要频繁地重启被调试机器,用虚拟机可以节省好多时间,so,省时!
  • 驱动程序的调试和测试需要多样化的操作系统环境和软件环境,用虚拟机做多个操作系统vhd的备份非常easy,而物理机,就只能装多个操作系统或者作多个ghost了(省力)。

有这样省钱省时又省力的好事,当然不能错过了。当然,有时因为虚拟机跟物理机的差异,有些问题必须要在物理机上调试,这时当然是省不了的了(话说开发Windows驱动也从来不是什么省时省心的好事儿)。但是,绝大多数时候,你还是可以使用虚拟机调试的。

使用虚拟机调试的大致示意图如下:

windbg_vpc有了感性的认识之后,下面讲解具体的配置过程:

首先,需要在物理机上安装虚拟机,我安装的是Virtual PC 2007,当然VMware也可以,仅仅作为一个调试的载体来说,VirtualPC的好处是简单易用。然后需要在你的虚拟机上安装好操作系统,操作系统的版本取决于你要在哪一个操作系统上调试你的驱动程序,可以直接去网上download别人已经安装好的vhd文件(Virtual Hard Disk file),比如说微软的网站上,一般会提供最新操作系统的体验版vhd,vhd文件时VMware和VirtualPC通用的。虚拟机以及虚拟机操作系统的安装过程不在此详述,网络上有很详细的资料。

WinDbg更新的也很快,一般来说推荐用最新的,但是有时候最新的会有些小问题,比如说刚刚最新的版本(6.10),在使用其Local Kernel Debugging的功能时,必须开启本机的"/debug"启动参数。

软件安装完成后,剩下的就是配置了,首先是对虚拟机配置,然后是物理机,物理机和虚拟机是通过命名管道相连接的,所以首先要配置虚拟机的命名管道。

【虚拟机】命名管道配置

在Virtual PC 中,命名管道的配置如下面的图所示:

wps_clip_image-0[23]

wps_clip_image1

VMware中,配置命名管道的方法如下:(还是截图)

vmware namepipe

 namepipe2

 

调试驱动:

 

为windbg设置目录

  • 设置File->Symbol File Path   为 驱动程序的pdb文件所在的目录(添加符号表)
  •  设置File->Source File Path   为 驱动程序的源文件坐在的目录(打开源码,插入断点,进行调试)
  • 在虚拟机中要加载相应的驱动可以用DriverMonitor来加载。
  • 点击FILE->open driver 和->start driver 来加载;stop driver来卸载
  • 至于加载是否成功可以通过电脑的设备管理器来查看:先点击 查看->显示隐藏的设备 ,然后刷新跟新设备,最后查看“非即插即用设备程序"是否有刚才添加的驱动。

11、打开源文件,按F9下断点

12、按F5或g命令,继续运行客户xp

13、在客户xp里启动待调试驱动

调试驱动

1. 按照之前的说明搭好调试环境后,先用 WinDbg 连上 VMware ,如果 GuestOS 阻塞了,则在 WinDBG 输入命令 “g” ,然后回车,直到让 GuestOS 跑起来。我们把编译好的驱动文件 (*.sys) 放到 GuestOS 里,回到 WinDbg ,按 “Ctrl+Break” , WinDbg 会让 GuestOS 暂停下来,我们也可以在 WinDbg 的命令栏输入命令了,在这里输入 “bu drivername!driverentry” (本例是 bu passthru!driverentry, 大小写不限)可以在驱动的 DriverEntry 函数的入口点下一个延迟断点,其实 BU 的意思就是 Set Unresolved Breakpoint , WinDbg 会记住这个断点,当这个驱动被加载了并且执行到这个地方, WinDbg 会暂停 GuestOS 让你进行调试操作。 drivername 是你的驱动名字,比如我在这里的驱动名字是 passthru ,那我在这里输入的命令如下: bu passthru!driverentry 。

2. 回车后即下好断点了。现在打开源文件,源文件在 HostOS 呢。 “Ctrl+O” 找到驱动的源文件打开,我们打开 passthru.c 。

3. 还要设置符号路径。 “Ctrl+S” 打开设置窗体,符号路径一般有两个(可以有多个),一个是你设置保存系统符号文件的路径,另一个是你驱动的 PDB 的路径,以分号隔开。如下:

C:/Windows/Symbols/;E:/Passthru/driver/objchk_wxp_x86/i386

4. 记得勾选 “Reload” , OK 后稍等片刻,等 WinDbg 把这些东西加载完毕后再操作。加载完后我们输入 “g” ,回车,让 GuestOS 跑起来。在 GuestOS 里运行驱动加载 / 卸载工具把我们的驱动加载起来。可以看到,已经断下来了,我们可以源码调试驱动了。

5、若在调试过程中,退出windbg,再重新进入windbg后,有时会停在

Opened //./pipe/com_1
Waiting to reconnect...

这时按Ctrl+Break可以再暂停客户xp

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值