wenmo8 发布的文章

今天我将写一篇关于我如何使用SOS.Net框架调试扩展(和!analyze-v)以轻松解决.NETFramework异常。此异常阻止事件查看器正确显示。事件查看器返回了一个错误,该错误提供了有关导致该问题的实际原因的很少信息。在本例中,我将演示如何使用windbg来获取有关出错的信息。我不必对此问题执行实时调试。相反,我使用进程转储来获取与根本原因相关的非常精确的信息,这些信息由调试器返回。然后我可以使用进程监视器来识别需要检查的文件。这些行动使我找到了问题的根源,很容易就得到了纠正。

报告的问题:打开时遇到以下错误事件vwr.msc(事件查看器)在Windows 2008 Server系统上:

"MMC could not create the snap-in."MMC could not create the snap-in.

The snap
-inmight not have been installed correctly

Name: Event Viewer

CLSID: FX:{b05566ad
-fe9c-4363-be05-7a4cbb7cb510}

六、异常信息流(ExceptionStream)

异常信息流包含异常信息。包括发生异常的线程、异常记录信息、线程上下文等信息。它紧挨着杂项信息流(MiscInfoStream)后面。

MiscInfoStream信息如下:

0x124+0n1365=0x678

我们看看ExceptionStream信息

可知ExceptionStream的RVA为678h=0x124+0n1365。所以,MiscInfoStream后面就是ExceptionStream。大小168字节,ExceptionStream数据如下:

ExceptionStream的数据结构如下:

typedef structMINIDUMP_EXCEPTION_STREAM {
ULONG32 ThreadId;
ULONG32 __alignment;
MINIDUMP_EXCEPTION ExceptionRecord;
MINIDUMP_LOCATION_DESCRIPTOR ThreadContext;
} MINIDUMP_EXCEPTION_STREAM,
*PMINIDUMP_EXCEPTION_STREAM;

七、线程列表流(ThreadListStream)

ThreadListStream流包含线程核心信息。它紧挨着异常信息流(ExceptionStream)。

异常信息流如下

 

0x678+0n168=0x720。而线程列表流如下

 

可知偏移是0x720,即证明杂项信息流是紧挨着系统信息流,大小有3796字节。

ThreadListStream包含的数据结构如下:

typedef struct_MINIDUMP_THREAD_LIST {
ULONG32 NumberOfThreads;
MINIDUMP_THREAD Threads[
0];
} MINIDUMP_THREAD_LIST,
*PMINIDUMP_THREAD_LIST;

八、线程信息列表流(ThreadInfoListStream)

ThreadInfoListStream包含了线程状态信息,在ThreadListStream的后面就是ThreadInfoListStream了。

ThreadListStream如下:

0x720+0n3796=0x15F4

ThreadInfoListStream如下:

所以ThreadInfoListStream紧挨着ThreadListStream,大小为5068字节。数据如下:

ThreadInfoListStream的数据由两个结构组成,一个是MINIDUMP_THREAD_INFO_LIST,另一个是MINIDUMP_THREAD_INFO。

MINIDUMP_THREAD_INFO_LIST包含数据大小的信息,相当于头部结构,如下:

typedef struct_MINIDUMP_THREAD_INFO_LIST {
ULONG SizeOfHeader;
ULONG SizeOfEntry;
ULONG NumberOfEntries;
} MINIDUMP_THREAD_INFO_LIST,
*PMINIDUMP_THREAD_INFO_LIST;