================================VirtualKD+Windbg+vmware=========================================================
双机调试的时候,不管是Windbg+vmware,还是Windbg+1394,其调试速率都是相对比较低的,有时候执行一条p命令,Windbg的状态都会BUSY..好久...
VirtualKD可以完美的解决这一问题。
VirtualKD主要是用来提高当使用vmware或virtualBox进行windows内核调试时的速率。以前的双机标准调试方法是利用虚拟COM串口,其速率很低。
通常,通过虚拟COM串口进行调试包括以下步骤:
1.windows使用虚拟COM串口和host主机之间进行数据交换;
2.WinDbg/KD使用VM提供的一个PIPE管道来与目标调试机进行通信。
这里最弱的连接是虚拟COM串口,其传输速率仅为:115200 baudrate,等效于115200 bit per second,也就是大约10KB/S的传输速率。VirtualKD取代了虚拟COM串口的功能,极大的提高了数据交换速率,可达6MB/S,但是官方给出的用!irpfind命令测试的话,vmware平台可达150KB/S,不过已经比虚拟COM串口快了15倍了。具体的效果只有在调试过程当中,才会体会到 -:) 事实上,VirtualKD的主要原理是,利用KD的扩展DLL功能,并且向虚拟机patch一个进程,二者通过pipe来进行通信。
使用方法:
1.配置方法可简单,可复杂。简单的方法有自动化,复杂的方法有手动配置。手动方法分为动态patch和静态patch两种,具体的可参考官网。http://virtualkd.sysprogs.org/
2.现在只说明下自动安装的情况,目标机为vmware,若是VirtualBox,则稍有改动
下载VirtualKD安装包,解压后,父目录下virtualKD2.2下有一个target目录,将该target目录copy到虚拟机,点击target/vminstall.exe 运行,然后直接安装即可。如图1所示,vminstall.exe会自动检测虚拟机的内核版本,因为我的目标机是wrk 的内核,故显示:wrk debug【VirtualKD】,当然,你也可以将显示的字符串修改后,再点击安装。
(图1)
当目标机为XP系统的时候,情况如图2所示:
(图2)
选择install以后,按照提示直接重启。
接着,在host主机端开启vmmon.exe程序即可(记着,vmmon程序要始终开启着),该程序会自动检测到虚拟机当中正在运行的操作系统。简单的设置下windbg的路径和启动方式(自动/手动),那么一切就OK了。虚拟机启动的时候,windbg调试机就自动或手动挂接上了。如图:
其实配置过程非常简单。这里写的比较啰嗦了,主要是自己第一次配置的时候,没好好读说明书,结果手动配置,浪费了时间;后来选择vminstall.exe自动安装,忘记了设置Debugger path..又浪费了时间去检查。
最终的结论是,使用VirtualKD代替了传统的虚拟COM串口以后,调试速度是飞一般的快。
接受新事物总是好的,认知的过程总是有点小曲折,不过目标对象是多么简单!!!
================================Windbg下载符号:=========================================================
打了补丁后经常出现"Your debugger is not using the correct symbols",使用WINDBG命令下载更新符号文件即可,以下命令不能去掉“.”,打完命令就开始下载了 流量监控可以看到
1: .sympath srv*G:/WinDDK/7600.16385.1/Debuggers/Symbols*http://msdl.microsoft.com/download/symbols
2: !sym noisy
3: .reload
完成下载后
lkd>.reload
Connected to Windows 7 7600 x86 compatible target at (Fri Apr 29 21:42:54.477 2011 (UTC + 8:00)), ptr64 FALSE
Loading Kernel Symbols
...............................................................
................................................................
..............................
Loading User Symbols
PEB is paged out (Peb.Ldr = 7ffda00c). Type ".hh dbgerr001" for details
Loading unloaded module list
..
lkd> !sym noisy
noisy mode - symbol prompts on
lkd> !sym noisy
noisy mode - symbol prompts on
lkd> .sympath srv*G:/WinDDK/7600.16385.1/Debuggers/Symbols*http://msdl.microsoft.com/download/symbols
DBGHELP: Symbol Search Path: srv*g:/winddk/7600.16385.1/debuggers/symbols*http://msdl.microsoft.com/download/symbols
DBGHELP: Symbol Search Path: srv*g:/winddk/7600.16385.1/debuggers/symbols*http://msdl.microsoft.com/download/symbols
Symbol search path is: srv*G:/WinDDK/7600.16385.1/Debuggers/Symbols*http://msdl.microsoft.com/download/symbols
Expanded Symbol search path is: srv*g:/winddk/7600.16385.1/debuggers/symbols*http://msdl.microsoft.com/download/symbols
WARNING: Whitespace at end of path element
下面在使用命令 dt _eprocess 出来了.本机7600.16695
lkd> dt _eprocess
nt!_EPROCESS
+0x000 Pcb : _KPROCESS
=============================Visualkd+vs2010 调试==============================================
Visualddk为最新的1.5, http://visualddk.sysprogs.org/,最新版的已经集成了virtualkd.
如果你按照主页上的quickstart一步步去做,会发现,几乎很难一步实现调试驱动.
现把我解决visualddk与vs 2010整合过程中的心得分享如下:
Q1: visualddk安装好后,在调试菜单下没有关于它调试驱动的菜单项.
解决: 在vs 2010工具->选项->环境->外接程序\宏的安全性里将visualddk的add-in的目录添加进去.
Q2: 点击调试菜单下的Driver Launch Settings一直出现throttle 0x10 write to 0x1错误,无法调试.
解决: 正确的步骤是,在VMWare启动时,将界面停留在os 选择这里,然后点击Driver Launch Settings,设置好,然后点击Launch,然后在VMWare里进入系统,经过这样的步骤后,虚拟机系统里的驱动,才可以被正常的调试.
Q3: 调试驱动时,一直出现不能加载pdb文件,错误为类没有注册.
解决: 如果是vs 2008以下的版本,应该不会出现这样的错误,VS 2010会出现,去找一个msdia09.dll,regsvr32一下即可.
Q4: VS调试时,在驱动源码中下的断点无法命中,会提示: 当前不会命中断点,还没有为该文档加载任何符号
解决: visualddk替我们生成的项目里,使用的编译命令是build,我将项目属性里的build改为nmake,然后复制一个makefile到项目文件夹中,即可解决断点无法命中的bug.
这是我早上在解决使用visualddk 1.5和VS 2010调试驱动时出现的各种问题的解决方法,希望能帮助到跟我碰到同样问题的朋友.