网上有很多关于“WinDBG+VMware调试内核”的文章,多数都是一篇转一篇,转的比较乱,容易被误导,弄的乱七八糟。今天找到一篇实用的文章,其实配置很简单。
第一部分(步骤):
先统一名称,真实的操作系统叫HostOS,在VMware里虚拟的操作系统叫GuestOS。
1.在VMware里安装好GuestOS;下载WinDBG并安装好。
2.添加一个串口
在关闭GuestOS的情况下才能添加硬件。关闭虚拟机中系统,编辑虚拟机,添加COM设备。添加串口的过程如下:
选择“串行端口”,
选择“输出命名管道”,
其他如下设置:
PS: 这里一定要把第二个设置成“其他终端是一个应用程序”。可能由于我用的是绿色版的VMWare 6 ,结果导致我得把上一步第二个选项设置成“其他终端是一个虚拟机”,并且不能勾选“I/O模式”,然后最终上图的设置中才能变成“其他终端是一个应用程序”。
3.在GuestOS的boot.ini文件里填入如下内容:
multi(0)disk(0)rdisk(0)partition(1)/WINDOWS="Microsoft Windows XP Professional Debug" /fastdetect /debugport=com1 /baudrate=115200
如图:
4.创建一个WinDBG的快捷方式,在“目标”一栏后面加上:
-b -k com:pipe,port=//./pipe/com_1,resets=0
如图:
5.重启GuestOS,选择Debug模式。
6.双击第4步创建的那个快捷方式启动WinDBG,它会自动去连接调试GuestOS。
可以看到,已经成功了,现在可以尽情地调试内核了。
第二部分(解说):
原理就是VMware在GuestOS虚拟一个COM口,并在HostOS创建了一个管道,这个管道的一端连接GuestOS的COM口,另一端则是WinDBG,所以HostOS(WinDBG)和GuestOS的所有数据交换都是通过这个管道来流通转发的。
1.我的电脑没有COM口,所以不能搭建调试环境?
不是的,你的电脑有没有COM口与这个调试环境没有任何关系,整个过程根本没有使用到你电脑的物理COM口。VMware只是在GuestOS虚拟了一个COM口而已。
2.在创建串口(COM口属于串口的一种)的过程中,看到指定的管道为“//./pipe/com_1”,我可以指定为其他吗?
可以的。这只是指定一个管道名字而已,VMware用这个名字来创建一个命名管道。我完全可以改成“//./pipe/liangyu”、“//./pipe/aaa”等等,但记得要把WinDBG的快捷方式处的管道名字更改为一样。
3.我可以在GuestOS的boot.ini文件更改那个COM口吗?比如把COM1改为COM2?
不可以的,VMware会把虚拟出的这个COM口总是定义为com1。GuestOS的其他COM口都得让位。
4.看到很多教程都说到要勾选“I/O模式”,如图:
一定要勾选吗?
这个勾选不勾选都可以,我没发现有什么大的区别。
5.在更改GuestOS的boot.ini文件的时候,增加有“/debugport=com1 /baudrate=115200”这些内容,含义是?
使用的调试端口是com1,波特率是115200。这是在告诉GuestOS现在要调试内核(操作系统),把调试信息往COM1口输出,使用的波特率是115200。
我在试验的时候发现,这个波特率其实也不一定要设为115200,完全可以修改为112233、445566等等其他数据。可能是因为WinDBG自动调节波特率来适配管道或COM口,所以波特率在这里没有实际意义。
6.WinDBG的快捷方式那里添加了“-b -k com:pipe,port=//./pipe/com_1,resets=0”这些内容,含义是?
大概意思就是使用管道“//./pipe/com_1”来进行内核调试。各个参数的说明在WinDBG的参考文档里面有,这里粘贴一下:
-b1. The debugger will break into the target computer immediately upon connection.
2. After a reboot, the debugger will break into the target computer once the kernel is initialized. SeeCrashing and Rebooting the Target Computer for details and for other methods of changing this status.
-k [ ConnectType]
7.一定要这样创建一个WinDBG的快捷方式才能进行调试吗?
不是的,我们完全可以先正常运行WinDBG,然后选择菜单“File”--->“Kernel Debug...”,然后会弹出以下对话框:
然后设置如上,点确定。这样也是可以进行调试的。
8.上面第5、第6步有先后顺序吗?看到很多资料都很强调这个先后顺序。
这个是没有先后顺序的。你可以先执行第5,再到第6步,或者先执行第6,再到第5步都是没有关系的。
选择Debug模式后,即使进入系统操作了很久,运行了很多东西,但只要你运行WinDBG,照样能够连上去调试。所以说这里是没有先后顺序的。
转自: http://hi.baidu.com/1ian9yu/blog/item/bbaf1301240d7ad3267fb524.html
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
◆Win7设置:
首先,向Win7的虚拟机中添加串口设备COM_1(使用命名管道)。
其次,新建Windbg快捷方式,填写参数“ -b -k com:pipe,port=//./pipe/com_1,resets=0”
然后,在WIN7里设置为:
bcdedit /dbgsettings serial baudrate:115200 debugport:1
bcdedit /copy {current} /d DebugEntry
bcdedit /displayorder {current} {d3d5f290-f64b-11de-a86d-aba3805c5629}
bcdedit /debug {d3d5f290-f64b-11de-a86d-aba3805c5629} ON
http://hi.baidu.com/reversefish/item/0504d9f94b6e031aa629888a
参考:
http://yexin218.iteye.com/blog/545187