windows错误代码含义和解决方案(5)

2019-01-12 16:08

BUGCHECK_STR值“0xCE”执行 .hh bug check 0xCE

命令,在打开的窗口左栏右下角点击“Display”按钮。如果要在WinDbg中显示一个停止代码或者错误检查类的详细说明(以此错误为例),键入命令 !analyze -show 0x000000CE 或者

!analyze -show 000000CE ,也可以是

!analyze -show 0xCE

。区域3中显示的就是二审判决的重要信息——线程堆栈信息。特别注意红色框内的部分,第一行是“WARNING: Frame IP not in any known module. Following frames may be wrong.”意思就是“警告:堆栈帧IP(InstructionPtr,仅x86处理器,用于决定帧的堆栈回朔的指令指针)不存在于任何已知的模块中,下面的帧可能出现错误”。这个意思的解释已超出本文讨论范围,笔者仅告诉大家,这行文字下面的一行右侧的模块是系统蓝屏崩溃时刻使用的最后一个模块(除了Windows内核最后调用KeBugCheckEx牺牲自己,就是警告文字上方的三行),往往就是它引起了崩溃!我们来细看。大家如果了解了堆栈的数据结构或是Windows内存分配机制就应该知道,Windows为 线程分配额外内存时是从高地指向低地址进行的,就是说,蓝色区域3中的堆栈信息我们得倒过来由下往上看,这样才是系统崩溃之前的一刻内核态函数的调用和传递情况,比如此例,系统内核执行体(nt!,即Ntoskrnl.exe)通过函数IopfCallDriver调用了BaseTDI,然后BaseTDI又调用了HookUrl.sys(Unloaded_字样表示未加载),再然后就蓝屏了。那么在这最后一刻就涉及到了两个非Windows内核的模块——BaseTDI以及HookUrl.sys。之所以要进行这个“二审判决”,就是要避免一种情况——万一HookUrl.sys与BaseTDI是来自两个公司或者两个软件的模块,而最后加载的

HookUrl.sys是没有问题的,出错是因为BaseTDI给HookUrl.sys传递了格式错误或者已被破坏的、或者非法的参数信息,HookUrl.sys接受此无效数据而引发了崩溃。如果我们不看线程栈,就根据之前的“Probably Cause by:HookUrl.sys”进行判决,我们很有可能枉杀无辜而让凶手逍遥法外。只有通过线程栈我们才能发现另一个驱动程序BaseTDI也被牵连进来。(在应用程序崩溃不致系统崩溃的调试分析中,由于处于用户态,WinDbg自动分析结果中的“Probably Cause by:”几乎都是错误的。在这种情况下,使用!thread命令是不能显示出任何信息的,因为这个命令仅对内核态的崩溃调试有效,然而kb命令也显示不出有用的信息,只有用“~*kb”来显示详细的全部线程栈才可能发现问题根源,有的时候还需配合其他命令,本文不作讨论)

当然,如果您熟练以后,觉得没有必要使用“!analyze -v”命令的话,可以直接使用 !thread 或者 kb

命令显示出核心的线程栈信息来二审判决。现在好了,犯罪嫌疑人目标锁定在BaseTDI和HookUrl.sys身上。现在,我们来看看它们究竟是什么、是哪个公司、哪个程序的模块。(从之前不能够自动从微软服务器为他们加载符号文件就可以知道,它们一定都是第三方驱动程序) 使用命令 lm kv m Basetdi*

(使用lm(列出模块)命令和内核k选项、详细v选项以及参数m,配合包含通配符*的字符串BaseTDI,来列出当时已加载于内核模式的包含字符BaseTDI的所有驱动文件详细信息。使用通配符来取代完整的文件名后缀可以避免信息的局限性,借此也许可以发现多个相关的模块以提供更多诊断线索),我们得到下图结果:

从图中蓝色框选部分,我们可以看出,当时内核态下只有一个叫BaseTDI.SYS的文件,这个文

件的路径位于System32\\Drivers下,属于名称为“瑞星个人防火墙”(ProductName: Rising PFW, PFW=Personal Firewall)的程序组件,软件公司注册商标为“瑞星”(LegalTrademarks: RISING)。文件的这些英文描述信息如果您不知道,可以百度一下。当然,没有被笔者高亮显示的信息(如文件时间戳、版本、校验和等等)也是非常有用的,比如百度一下文件版本,也许您会发现该软件已经提供了更新的解决此问题的文件。同样,我们使用 lm kv m hookurl*

来显示当时内核态下包含HookUrl的文件及其详细信息。结果如下:

图示是一个不令人满意的结果,因为如高亮部分所示,这个模块未被加载,因此没有信息被记录。不过我们有百度,不用急,百度一下你就知道。在搜索完HookUrl.sys之后,发现这个也是瑞星个人防火墙的文件。其实这个案例就是著名的“瑞星个人防火墙跨版本升级到2009版时引发蓝屏”事件。您可以通过关键字“瑞星防火墙2009升级造成蓝屏”进行百度搜索。到目前为止,瑞星官方都没有任何针对此事件的正式答复,虽然不是每个用户都出现此问题,但是非常多的用户都报告了此问题,瑞星也不承认这个是软件缺陷,只有官方卡卡论坛上有一个不知道是不是工作人员的人发帖要求大家遇到蓝屏就上传内存转储文件。说到这里,我对瑞星又要失望了,但是通过这个可见蓝屏内存转储文件的分析是多么的有用!

在这里,我还要给出两个要得到更多信息时可能会使用到的命令,一个是 !process 0 0

,它可以列出当时运行着的所有进程的技术信息;另一个则是 !vm

,它能够显示出当时的虚拟内存使用情况,这对于分析系统是否耗尽了虚拟内存、换页内存池或非换页内存池,并结合进程列表找到可能的内存泄漏错误非常有用,不过已超出了本文的讨论范围。 最后,我们来看看以下的两种特殊情况该如何使用WinDbg进行调试分析:

第一种情况是系统挂起,也就是“死机”、“系统没有响应”,在这种情况下,系统是根本无法自动生成内存转储文件的,而且您也不可能操作本地软件来查明是什么挂起了系统,这个时候我们需要手动让系统崩溃,以生成内存转储文件。具体做法为,在系统挂起之前,打开注册表编辑器并定位至 HKEY_LOCAL_MACHINE \\System\\CurrentControlSet\\Services\\i8042prt\\Parameters ,在该项下面建立一个名为 CrashOnCtrlScroll

的DWORD类型键值(注意大小写),并将其设置为1,然后重新启动应用此更改。一旦系统挂起,就可以通过按住右边Ctrl键的同时击ScrollLock键两次来生成一个停止代码为0x000000E2(MANUALLY_INITIATED_CRASH)的手动崩溃。得到内存转储文件以后按照上面的方法分析。注意,此方法对插入USB口的USB键盘无效。(笔记本计算机键盘很多都是通过PS/2接口连接的,因此有效)

第二种情况是进不了系统就自动崩溃,无法提取出内存转储文件。这种情形以及当有特定的需要时,我们都可以采取双机调试的方法。我们将发生崩溃的机器称为“目标机”,将用来连接到“目标机”进行调试的机器称为“调试主机”,调试主机必须安装有WinDbg。

首先,我们需要在两台机器间建立连接,在新版的WinDbg中,这里一共有三种方式连接到目标机。第一种方式为通过COM端口连接,使用零调制解调器线缆(Null-Modem),也就是COM对接线——两个头都是孔的RS232线;第二种是利用IEEE 1394线缆连接,但是这种连接要求两台机器运行相同版本的至少为Windows XP的系统;第三种方式是使用特制的USB 2.0调试线缆连接,这不是普通的USB连接线,是一种内置硬件芯片来支持调试的线缆,而且这种方式要求目标机运行的系统至少为Windows Vista。使用这三种连接方式进行双机调试都需要在目标机上作出相应的设置调整,具体参见WinDbg帮助文件,这里仅讨论第一种连接方式的设置,因为这是XP及以上系统默认支持的最简单的方式。此时我们假设已经使用COM线缆连接好了两台机器。

其次,在调试主机上启动WinDbg,配制好符号文件之后,我们展开“File”菜单,选择“Kernal Debug…”,这将会打开如下的“Kernal Debugging”对话框:

默认打开的就是COM连接方式的配置页面。这里的“Baud Rate(传输速率)”以及“Port(端口)”需要根据下一个步骤的操作方式来配置。

最后一步,我们可以启动目标机,在引导Windows之前按下F8,在启动菜单中选择“调试模式”,这样,传输速率被系统默认设为19200,端口也默认被设为COM2,因此上一步骤中应该照此设置后点击“OK”。关于XP修改Boot.ini、Vista修改Bootcfg的方式启用指定端口、传输速率的调试,请参见WinDbg帮助文件,在此不再赘述。目标机一起动Windows,位于调试主机的WinDbg就能够有信息的显示,然后按照本文介绍的方法进行调试。另外,对于上面提到的系统挂起的情况,也可以采用这种双机调试,并且有新的命令 .crash

强迫目标机在它的本地硬盘驱动器中生成一个崩溃转储,当系统重新引导以后就可以提取此转储,当然,也可以使用 .dump /m COM.dmp

命令,在调试主机WinDbg所在目录下生成一个名叫“COM.dmp”的小内存转储文件(命令中的文件名可以改成其它的)。


windows错误代码含义和解决方案(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:高财第三章

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: