elva

使用Virtual PC进行Windows内核调试的详细过程

使用WinDbg进行Windows内核调试通常需要两台计算机,一台是Debuggee,一台作为Debugger,又成为Host。使用Virtual PC可以在同一台电脑上进行内核调试,对于某些调试任务来说还是非常有用的。

下面以Virtual PC 2004为例,介绍一下利用Virtual PC进行Windows内核调试的详细过程。

1,下载并安装Virtual PC 2004,从略。

2,启动Virutal PC Console(控制台),创建一台新的虚拟PC,安装向导的提示配置硬盘、内存等参数。

3,在刚才创建的虚拟PC上安装操作系统,这个操作系统应该是你要调试的Windows版本。比如你想调试你的驱动程序在Windows Server 2003上出现的问题,那么就安装Windows Server 2003。我们以Windows 2000为例。

4,配置虚拟PC的串行口,在Virtual PC的控制台中选择Windows 2000,然后点击Settings按钮弹出设置对话框,然后在左侧的列表中(如下图)选择COM1。

右侧选择Named Pipe选项,即使用命名管道来模拟串行口,然后输入管道的完整名称:\\.\pipe\com_1,com_1可以为其它名称,但是前面的部分应该保持不变。

5,启动虚拟PC中的Windows 2000,然后进入命令行窗口,执行如下命令以便在启动菜单中增加调试选项:

c:

cd\

attrib -r -h

edit boot.ini

然后将其最末一行复制,并加入调试选项,成为为如下状态:

6,在虚拟PC中选择重新启动Windows 2000,当出现启动菜单时,按方向键使其停止自动计时,等待在这里。

7,在主机(debugger)上准备启动WinDbg,考虑每次输入命令行参数太麻烦,所以建议建立一个如下内容的批处理文件,并将其放到与WinDbg.exe同位置的目录中。

windbg -k com:pipe,port=\\.\pipe\com_1

8,运行批处理文件,使其也进入等待状态:

9,切换到虚拟PC窗口,选择带有“Debug Enabled”的一项然后回车启动。

10,切换到WinDbg窗口并观察,如果一切顺利,那么会有如下类似信息输出:

Connected to Windows 2000 2195 x86 compatible target, ptr64 FALSE
Kernel Debugger connection established.
Symbol search path is: SRV*c:\symbols*http://msdl.microsoft.com/download/symbols
Executable search path is:
Windows 2000 Kernel Version 2195 UP Free x86 compatible
Kernel base = 0x80400000 PsLoadedModuleList = 0x8046a4c0
System Uptime: not available

11,见到如上信息就说明WinDbg已经与虚拟PC中运行的Windows 2000成功建立调试对话了。如果想感受一下将Windows控制于股掌之中的快感,那么就按下Ctrl+Break,随着按键发出,Windows 2000会被立刻定住。WinDbg中会显示如下信息:

*******************************************************************************
*                                                                             *
*   You are seeing this message because you pressed either                    *
*       CTRL+C (if you run kd.exe) or,                                        *
*       CTRL+BREAK (if you run WinDBG),                                       *
*   on your debugger machine's keyboard.                                      *
*                                                                             *
*                   THIS IS NOT A BUG OR A SYSTEM CRASH                       *
*                                                                             *
* If you did not intend to break into the debugger, press the "g" key, then   *
* press the "Enter" key now.  This message might immediately reappear.  If it *
* does, press "g" and "Enter" again.                                          *
*                                                                             *
*******************************************************************************
此时WinDbg的命令提示符区会显示一段时间*BUSY*(或者其它无效状态,老本本的WinDbg),这是因为WinDbg在寻找调试符号。


在你非常熟悉以上过程之后,其实可以不完全拘泥以上过程的, 比如可以先让Windows 2000以调试选项运行起来,然后再运行WinDbg。

最后再介绍几种常见的失败情况:

1)启动WinDbg,但是出现下图所示的错误信息,Win32 error 2,即指定的文件名找不到,这是因为虚拟PC还没有启动,还没有创建这个管道\\.\pipe\com_1, 系统中不存在这样的文件。应该运行虚拟PC,哪怕只到启动选项也可以,便不会再有这个错误了。

posted on 2008-07-23 19:06 叶子 阅读(985) 评论(0)  编辑 收藏 引用 所属分类: 驱动开发


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理