这两天使用Virtual PC(2004)安装了Windows XP SP3的Check版本。有些要点值得分享和备忘。
1 安装过程中的蓝屏
在安装程序复制好文件,重新启动时,会出现蓝屏,蓝屏代码是未处理的内核态异常,异常代码是80000003,即断点异常。看到这个蓝屏后,我想到是 Check版本中的某些ASSERT所导致的,保留了更多的断言是Check版本的最大特色。对于断言,如果有调试器,那么系统就会中断到调试器,然后继续也可以了。
但是此时还不能进入系统启用调试选项,怎么办呢?于是想到了按F5在高级启动选项中选择调试选项。关于这个默认调试选项采用的连接参数,一种说法是COM1,一种说法是可以枚举到的最大编号COM口。实验下来,是第二种。也就是当调试器中使用COM2时,成功与虚拟机中的KD建立了连接。这验证了《软件调试》所采信的说法(18.3.3,P478)对于XP SP3也是正确的。
以下是初始的输出信息:
Opened \\.\pipe\com2
Waiting to reconnect...
Break repeatedly, break Once, Ignore, terminate Process, or terminate Thread (boipt)?
这是ASSERT断言所导致的询问,可以输入boipt四个字符之一来选择动作。先输入b让其反复中断。
下面一行的提示信息告诉我们如何把上下文切换到ASSERT断言时所保存下来的上下文:
Execute '.cxr F8999E90' to dump context
而后,WinDBG开始与KD通话,获取对方的详细信息:
Connected to Windows XP 2600 x86 compatible target, ptr64 FALSE
Kernel Debugger connection established.
WARNING: Inaccessible path: 'D:\new\SYMBOLS.PRI\retail'
Symbol search path is: SRV*d:\symbols*http://msdl.microsoft.com/download/symbols
Executable search path is:
此时按Ctrl+Alt+V让WinDBG输出尽可能多的信息:
Verbose mode ON.
下面两句是收到关于内核模块的符号加载事件:
ntoskrnl.exe
ModLoad: 80a02000 80d8e000 ntoskrnl.exe
接下来,WinDBG开始与KD通话,获取对方的详细信息:
Windows XP Kernel Version 2600 (Service Pack 3) MP (1 procs) Checked x86 compatible
Built by: 2600.xpsp.080413-2133
Kernel base = 0x80a02000 PsLoadedModuleList = 0x80af5708
Debug session time: Thu Sep 11 05:11:57.870 2008 (GMT+8)
System Uptime: 0 days 0:00:16.043
了解了调试目标的基本信息后,WinDBG为其选择匹配的工作空间,并根据工作空间的参数,加载其中定义的扩展模块:
Loaded dbghelp extension DLL
Loaded ext extension DLL
Loaded exts extension DLL
Loaded kext extension DLL
Loaded kdexts extension DLL
最后,WinDBG准备进入了命令模式,显示异常信息和有关的指令:
Break instruction exception - code 80000003 (first chance)
nt!DbgBreakPoint:
80ab8f5c cc int 3
因为我们刚才选择的是反复中断,所以可以输入g命令,恢复执行,而后会再次中断:
kd> g
*** Assertion failed: The system BIOS on this machine does not properly
support the processor. The system BIOS did not load any microcode update.
A BIOS containing the latest microcode update is needed for system reliability.
(CurrentUpdateRevision != 0 || ProcessorSignature.u.hw.Family < 6)
*** Source File: d:\xpsp\drivers\filters\update\update.c, line 1116