原文发表于百度空间,2009-01-09
==========================================================================

今天又想起来VirtualKD这个东西,试用了一下,真是爽坏了,可能我火星了~~

很久以前就知道小喂有个VmKd工具,使用Vmware的后门指令直接拷贝数据来代替模拟串口,能大大提高调试时的数据传输速度。不过那个对VMware版本的依赖性太强,我的Vmware就没法用,所以很不爽得又放下了,很长一段时间也没关注过。最近翻资料时又找到index09同学的一篇文章,介绍了比Vmkd更好用的VirtualKD,于是马上下回来试用了一下,安装简单多了,使用方便,终于体会到了什么叫做速度,调试时那个嗖嗖的啊,比老爷车一样的串口爽太多了,相信某些同学已经用了很久了。各位如果不嫌我火星的话,我就来详细介绍一下,好东西分享给大家:)

使用场景:如果你正在使用Windbg+Vmware或Windbg+VirtualBox进行内核调试,并且觉得虚拟串口方式过于缓慢,那么这个就是你最需要的东西了!它可以大幅提升调试时数据传输的速度,实在是居家旅行、杀人灭口,必备良药~~(后悔用得太晚了)
这是一个开源项目,工程在sourceforge上:
http://sourceforge.net/projects/virtualkd/

官方网站:http://virtualkd.sysprogs.org/
原理和Vmkd差不多,但是使用范围更广,安装更简单了。我简单讲一讲在Vmware上如何使用。

一、准备工作

从上面的网址下载VirtualKD-2.2.zip(当前版本为2.2),并解压出来。应该会有以下文件:

PS:搬运这篇文章时,VirtualKD已经更新到了3.0版本,支持Win10系统,下载地址http://virtualkd.sysprogs.org/download/

二、Guest OS中相应部分的安装
启动虚拟机中的GuestOS,然后把上面的target文件夹的内容全部拷贝到GuestOS中。
运行vminstall.exe,会出现以下界面:

这里相关的东西除了拷贝文件外添加服务外,其实就是新添加一个DEBUG模式的启动菜单,就是更改boot.ini(如图中红框部分所示),但是这一切由vminstall.exe来完成。

不过我发现vminstall.exe好像有个小Bug,新添加的启动入口并没有名称显示,你可以打开boot.ini自己加上。如果是Vista或Win7的话,使用如下命令:
bcdedit /set dbgtransport kdvm.dll
这个装好后,GuestOS中的部分就完成了。

三、HOST OS中相应部分的安装
实际上VirtualKD完全绿色,不需要安装,只要找个合适的地方放好,然后运行vmmon.exe就可以了~~
vmmon.exe会自动找到vmware-vmx.exe并显示在上面,并显示它的一些详细信息。

然后在界面下方的位置你会看到一些设置选项:
Start debugger automatically:GuestOS启动时自动启动调试器
Stop debugger automatically:退出时自动关闭调试器(经测试好像不好使)
DbgBreakPoint() on start:系统启动时的第一时间就中断下来
TraceAssist params:该功能是把虚拟机GuestOS的DbgPrint输出记录到文件,而不是发送到调试器,这样可以在输出特别频繁时提高性能
Debugger path:调试器路径,这里选择你的Windbg就可以了
Unpath process/Repath process:动态地对vmware_vmx.exe进行Patch或恢复(这也是VirtualKD功能的核心)
Run debugger:启动设置好的调试器
Close:退出vmmon.exe

在HOST端我们要做的工作将会非常简单,只需要在Vmware中启动虚拟机的同时启动vmmon.exe就可以了。剩下的vmmon.exe都会替我们做好(动态查找vmware-vmx.exe并进行Patch).
如果你选上了Start debugger automatically那么虚拟机中GuestOS启动的同时vmmon会自动帮你打开调试器,非常方便。
如果你仍然想像以前那样自已通过加参数的方式启动windbg进行双机调试,那么它的参数可以这么写:
"C:\Program Files\Debugging Tools for Windows\windbg.exe" -k com:port=\\.\pipe\kd_WinXP,pipe
关键就是这个管道的名称,也就是kd_<你的GuestOS的安装目录>.比如我的XP虚拟机安装目录在E:\Vmware\WinXP,那么管道名称就是kd_WinXP.
实际上也就是虚拟机系统的*.vmx文件所在的文件夹的名字。
更方便一点,直接看vmmon里显示的管道名称就可以了。

如果你使用的是这种内存动态Patch方式的话,因为总是要运行vmmon.exe,建议还是选上自动启动调试器,会方便一点。或者可以按照readme.txt中的相关介绍直接进行永久性文件Patch,这样就不需要运行vmmon.exe了,详情可参考readme.txt。
另外,VirualKD还解决了一个BUG,就是GuestOS中断在调试器时会大量占用CPU的问题,这个也很爽了。搞完这些之后,调试时数据传输的速度将会大幅提升,你就可以体验极速的感觉了~~~

【旧文章搬运】Windbg+Vmware驱动调试入门(四)---VirtualKD内核调试加速工具的更多相关文章

  1. 【旧文章搬运】PE感染逆向之修复(Serverx.exe专杀工具出炉手记)

    原文发表于百度空间,2008-10-4看雪论坛发表地址:https://bbs.pediy.com/thread-73948.htm================================== ...

  2. 【旧文章搬运】Windbg+Vmware驱动调试入门(一)---Windbg的设置

    原文发表于百度空间,2009-01-08========================================================================== Windb ...

  3. 【旧文章搬运】Windbg+Vmware驱动调试入门(二)---Vmware及GuestOS的设置

    原文发表于百度空间,2009-01-08========================================================================== 这一篇是主 ...

  4. 【旧文章搬运】Windbg+Vmware驱动调试入门(三)---Windbg基本调试入门

    原文发表于百度空间,2009-01-09========================================================================== 这一节的内 ...

  5. 《天书夜读:从汇编语言到windows内核编程》四 windows内核调试环境搭建

    1) 基础篇是讲理论的,先跳过去,看不到代码运行的效果要去记代码是一个痛苦的事情.这里先跳入探索篇.其实今天的确也很痛苦,这作者对驱动开发的编译与调试环境介绍得太模糊了,我是各种尝试,对这个环境的搭建 ...

  6. 【旧文章搬运】关于windbg搜索符号文件的一点说明

    原文发表于百度空间,2010-09-07========================================================================== 本来只是打 ...

  7. 【旧文章搬运】无Device的驱动如何通信

    原文发表于百度空间,2009-07-14========================================================================== 标准的驱动 ...

  8. 【旧文章搬运】Windows内核常见数据结构(驱动相关)

    原文发表于百度空间,2008-7-24========================================================================== 这些是驱动中 ...

  9. 【旧文章搬运】KeUserModeCallback用法详解

    原文发表于百度空间及看雪论坛,2010-01-10 看雪论坛地址:https://bbs.pediy.com/thread-104918.htm  代码及附件可到这里下载=============== ...

随机推荐

  1. Docker 的CMD与ENTRYPOINT区别

    我们在构建一个docker镜像的时候,Dockerfile里面有两个命令会引起我们的注意,它们就是 CMD 和 ENTRYPOINT,看起来很相似,实际上并非如此. 一.CMD 顾名思义就是允许用户指 ...

  2. BUPT 2012复试机考 2T

    题目描述 ​给你一个n*n的矩阵, , 求其矩阵的k次幂,即Pk 输入格式 第一行,一个整数T(0<T<=10),表示要求矩阵的个数. 接下来有T组数据,每组数据格式如下: 第一行:两个数 ...

  3. JVM 调优 —— 新生代 Survivor 空间不足

    零. 新生代调优规律 增大新生代空间. Minor GC 频率降低, Minor GC 时间上升. 降低新生代空间, Minor GC 频率上升, Minor GC 时间下降 一. 新生代典型问题 先 ...

  4. nginx 配置nginx.conf,负载均衡,逻辑分流

    nginx 最重要的配置文件nginx.conf: 一般的配置我不做解释,网上到处都是,主要对主要的几点进行注释(如下) worker_processes ; error_log /data/logs ...

  5. C#语言 语句

    //有一组函数: //y=x(x<1) //y=2x-1(1<=x<10) //y=3x-11(x>=10) //括号内是x的满足条件 //实现功能,随意输出x /*Conso ...

  6. 系统去掉 Android 4.4.2 的StatusBar和NavigationBar

    1. System Bar简单介绍 在Android4.0 (API Level 14)及更高版本号中.System Bar由Status Bar<位于顶部>和Navigation Bar ...

  7. Python演绎的精彩故事(二)

    书接上回.在展示了App最顶层的代码后,我们去看看各模块怎样编程. 为了能看懂各模块的代码,首先须要铺垫一下Softchip架构的基本概念和设计规范. 1.随意模块不持有其它模块的实例.自然不再显式使 ...

  8. LiberOJ#6178. 「美团 CodeM 初赛 Round B」景区路线规划 概率DP

    题意 游乐园被描述成一张 n 个点,m 条边的无向图(无重边,无自环).每个点代表一个娱乐项目,第 i 个娱乐项目需要耗费 ci 分钟的时间,会让小 y 和妹子的开心度分别增加 h1i ,h2i ,他 ...

  9. JavaScript数组的某些操作(一)

    在软件开发的过程中JavaScript的编程在所难免.当中对数组的操作尤为常见,这里介绍一下和JavaScript数组相关的某些操作: 1.删除并返回数组的第一个元素--shift方法: <!D ...

  10. iOS中城市定位功能的实现

    引入框架:CoreLocation .h文件 引入CoreLocation/CoreLocation.h @interface WeatherViewController :UIViewControl ...