(整理+原创)windbg+vmware进行驱动源代码调试 转

一般情况下驱动是不能进行源代码级别的调试的,原因是驱动代码都是运行在内核模式,所以要进行源代码级调试的话,需要双机(一台调试机(可以是虚拟机)一台主机),当主机进行调试的时候,调试机整个暂停运行



网上的教程说的不清楚,整理了个,免得以后要用找不到 




一.安装文件:(这些换成你自己的路径,不一定要一样的)
VMware 安装路径:C:\Program Files\VMware\VMware Workstation
Symbols(代码库) 安装路径:D:\tools\Symbols
WinDbg 安装路径:C:\Program Files\Debugging Tools for Windows\windbg.exe
虚拟Xp 安装路径:E:\vmxp(记住windbg是安装在主机上,安装在虚拟机上是不能进行源代码调试的)
驱动代码所在位置:D:\Sfilter\sys (驱动源代码,包括sourcer、sys、pdb、inf、c/c++等) 驱动要安装在虚拟机,源代码等要放在主机上 

VMware中的工具:打开VMware中的VM菜单-》Install VMware tools 

二.安装VMware,在安装winXp并进行以下配置,可以在window下对虚拟机调试: 

1.在VMware的WinXp目录(E:\vmxp)下找到winxppro.vmx文件,加入以下的语句,为提高效率。(这个不是必要的)
vmmouse.present = "FALSE" 
svga.maxFullscreenRefreshTick = "5" 

2.在VMware的WinXp中添加串口设备Serial Port(打开VMware选择WinXp进行操作(非常重要,不要遗漏了)
\\.\pipe\com_1
This end is the server
The other end is a virtul machine 

Advanced Yield CPU on poll 要选中 


3.在WinDbg的快捷方式点右键-->属性-->目标 中加入(主机安装完windbg时候在桌面上新建快捷方式,右键属性) 
"C:\Program Files\Debugging Tools for Windows\windbg.exe" -b -k com:port=\\.\pipe\com_1,baud=11520,pipe 


4.启动VMware的WinXp,在它的c:\boot.ini文件中加入(这个是隐藏文件)
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional - debug" /fastdetect /debug /debugport=com1 /baudrate=115200 


5.在本机上加“系统环境变量”(这个没有必要,只要你有下载symbol代码库就行了,可以跳过) 
_NT_SYMBOL_PATH
SRV*e:\symbols*http://msdl.microsoft.com/download/symbols;D:\tools\Symbols 


三.运行步骤:
1.启动WinDbg(这个不要点击新建的那个快捷方式,从开始菜单运行,试试就知道了) 
(1)加载Symbol的路径(菜单File-->Symbol File Path D:\tools\Symbols;D:\Sfilter\sys\objchk\i386)(菜单File-->Symbol File Path 点击browse 添加第一个是你安装的代码库的路径,当你安装代码库的时候你会看见路径,找到添加即可,第二词点击browse添加你驱动代码的生成文件路径,找到你驱动的文件夹即可,最后一层一定是i386) 
(2)加载Source的路径(菜单File-->Source File Path D:\Sfilter\sys\)(这个是你驱动源代码的路径) 
(3)加载ImagePath路径(菜单File-->Image File Path D:\Sfilter\sys\objchk\i386)(和(1)步中的第二个路径是一样的) 

2.启动虚拟机,选择debug



这时候虚拟机会暂停运行,在windbg里面输入g虚拟机会全速运行,如果你想调试驱动代码的话,可以点击windbg的暂停按钮,在命令窗口输入 bp 函数名 ,比如     

bp TdiFuncs_Send  即可,然后输入g 

此时虚拟机会全速运行,直到你在虚拟机里面安装该驱动,当驱动运行至TdiFuncs_Send函数时整个虚拟机便会暂停运行,此时整个虚拟机随你蹂躏

你可以查看变量什么的,和其他调试器差不多,但是驱动调试就是比较麻烦,



四.在winDbg中常用的命令(更多命令请查阅帮助)
下断点:bp 地址 也可 bp 函数名
列出断点:bl
清除断点:bc 断点号

禁用断点:bd 断点号 

使能断点:be 断点号 

重新加载:.reload 

列出符号库: lm


加载符号库:ld 

看结构体:dt 〔结构体〕



写驱动容易引起蓝屏的,最经常的原因是指针指向未初始化的变量!!出错即死,没得商量

如果你是使用irptrace、drivermonitor等来查看调试信息的话,蓝屏就看不到了,

不过当电脑蓝屏时候,会将信息压入一个转储文件中,关于转储文件不清楚的去baidu一下,如果你有进行双机调试的经验的话,利用dump文件来查看出错函数是很方便地。。。

先把蓝屏的电脑重启(一般他自己就重启了),找到dump文件(找不到的search一下),复制到主机上(驱动代码一般在虚拟机调,所以杯具的都是虚拟机),开始菜单运行windbg,file—>open crash dump 打开即可哈(注意前面的 三.运行步骤: 改需要的代码库还是需要的 要不然查看不了).

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值