摘要:在日常分析dmp文件工作中,我发现用".loadby sos clrjit"指令来加载sos扩展库在有的dmp文件成功有的不成功,都是报如下错误: 0:036> .loadby sos clrjitThe call to LoadLibrary(sos.dll) failed, Win32 erro
阅读全文
摘要:八、线程信息列表流(ThreadInfoListStream) ThreadInfoListStream包含了线程状态信息,在ThreadListStream的后面就是ThreadInfoListStream了。 ThreadListStream如下: 0x720+0n3796=0x15F4 而Th
阅读全文
摘要:什么是System.IO.DirectoryNotFoundException 找不到文件或目录的部件时引发的异常。 继承关系 Object Exception SystemException IOException DirectoryNotFoundException 例子 using Syste
阅读全文
摘要:七、线程列表流(ThreadListStream) ThreadListStream流包含线程核心信息。它紧挨着异常信息流(ExceptionStream)。 异常信息流如下 0x678+0n168=0x720。而线程列表流如下 可知偏移是0x720,即证明杂项信息流是紧挨着系统信息流,大小有379
阅读全文
摘要:六、异常信息流(ExceptionStream) 异常信息流包含异常信息。包括发生异常的线程、异常记录信息、线程上下文等信息。它紧挨着杂项信息流(MiscInfoStream)后面。 MiscInfoStream信息如下: 0x124+0n1365=0x678 我们看看ExceptionStream
阅读全文
摘要:今天我将写一篇关于我如何使用SOS.Net框架调试扩展(和!analyze-v)以轻松解决.NETFramework异常。此异常阻止事件查看器正确显示。事件查看器返回了一个错误,该错误提供了有关导致该问题的实际原因的很少信息。在本例中,我将演示如何使用windbg来获取有关出错的信息。我不必对此问题
阅读全文
摘要:Microsoft调试工具for Windows提供了两种创建远程调试连接的方法,包括“连接到远程会话”和“连接到远程存根”。连接到远程会话是这两个会话中最常用的,也是您通常需要的全部内容,但是它不允许客户端访问远程上缺少的调试符号。通常,远程调试会话将在所有用户都可以访问符号信息的公司网络中完成,
阅读全文
摘要:五、杂项信息流(MiscInfoStream) 在系统信息流后紧挨着的就是杂项信息流。而系统信息流信息如下 0xEC+0n56=0x124 而杂项信息流如下: 可知偏移是0x124,即证明杂项信息流是紧挨着系统信息流,大小有1364字节。 MiscInfoStream包含各种信息。数据结构如下: t
阅读全文
摘要:四、系统信息流 流目录后面紧接着就是流数据了。第一个流数据就是系统信息流。 可知,这个流的起始于文件偏移0xEC,大小是0x38,也就是56个字节。 从上图可知,系统信息流就是紧挨着流目录尾部。这个流包含了如下操作系统和处理器信息:处理器架构、级别、版本,CPU信息等。数据结构如下: typedef
阅读全文
摘要:如果到目前为止您还没有机会调试优化的x64代码,请不要再等待太久,也不要落后于时代!由于类似x64 fastcall的调用约定加上大量的通用寄存器,在调用堆栈中的任意点查找变量值确实非常困难。在本文中,我想详细介绍一些我最喜欢的调试优化x64代码的技术。但是在深入研究这些技术之前,让我们先对x64调
阅读全文
摘要:我最近接到个问题,客户打电话来报告卷根的“磁盘大小”与卷属性中报告的“已用空间”数量之间存在显著差异。在考虑这一点时,我注意到我自己的C:驱动器有一个神秘的20GB的差异。 下面是我如何找到答案的故事。 在开始之前,有两种方法用于计算磁盘使用量…方法1–体积位图分析 下面的饼图显示的%已用%和%空闲
阅读全文
摘要:这种处理的有效性主要取决于所选择的语言和平台,因此,详细了解它们的正确用法和行为非常重要,这样我们的用户和其他开发人员在诊断代码中的问题时免受痛苦。在本文中,我们将了解C和.NET在错误处理方面的作用。 词汇表CLR:公共语言运行时的缩写,是.NET运行时,它负责执行用所有.NET语言编译的应用程序
阅读全文
摘要:今天分析一个dmp文件时,想看下内存的使用情况,于是执行!address -summary,结果却有如下输出: 0:000> !address -summaryThe current target does not provide full memory information. No meanin
阅读全文
摘要:在某些情况下,我们会执行实时调试以确定服务器故障的根本原因。在内存转储的情况下,文件通常非常大,因此通过网络复制文件,即使是在最快的广域网连接上,也可能需要很长时间。解决方案是远程调试。 你应该怎么做? 首先,需要两个人:一个是远程人员,另一个是通过使用安装在他们机器上的调试器调试进程来帮助远程用户
阅读全文
摘要:在某些情况下,您可能希望使用用户模式调试器从内核调试器中调试进程。它可能是你有一个加载内核模式驱动程序的应用程序,并且你希望能够调试应用程序的用户模式方面,然后进入内核以跟踪对内核的调用。 这是你需要做的! 通过串行电缆(调制解调器电缆)、USB电缆或FireWire电缆连接内核调试器,并将您的计算
阅读全文
摘要:我最近处理的一个棘手的死锁问题开始。让我先解释一下表面症状,然后我们就可以找到好东西了。当运行Vista的用户尝试启动internetexplorer时,任何事情都不会发生。所以他们再次双击图标,还是什么也没发生。所以用户会重新启动并返回他们的网络活动。经过一些基本的故障排除后发现Iexplore.
阅读全文
摘要:简介 我最近研究了一个问题,Winlogon中两个线程的交互导致错误检查。一个线程是初始化GDI的Winlogon线程。这个场景的有趣之处在于另一个线程是如何在这个进程中结束的。 线程在干什么? 下面是线程堆栈的用户一半。线程试图加载DLL ChildEBP RetAddr Args to Chil
阅读全文
摘要:说到现场调试,断点是最重要的。通常,在生产环境中解决一个非常复杂的问题需要在本地、非生产环境中调试我自己的一台测试机器。我通常会调试有问题的进程或代码,以便更好地了解它是如何工作的,以及在我进入时需要收集哪些数据。这通常涉及一些逆向工程,并对相关流程或模块进行代码审查。我们总是希望在进行实时调试时尽
阅读全文
摘要:我们很多人都认为调试器中的一些简单命令是理所当然的,这些命令可以让生活变得轻松。我想了几个特别能搭配的。第一个命令是kn。Kn将显示当前调用堆栈,并在单个调用的最左边包含堆栈帧编号。我在Windbg中运行BadWindow.EXE文件,通过~0s将我的线程设置为线程0。然后我只需键入kn。这将转储调
阅读全文