摘要:我经常在windbg中调试.netframeworkv2.0/v 4.0代码。在v 2.0中,主clr dll称为“mscorwks.dll”,在v 4.0中称为“clr.dll”。很多人都知道,要在v 2.0中加载sos,我们必须输入“.loadby sos mscorwks”,在v 4.0中输入
阅读全文
摘要:DBGHELP.DLL中有一些文档化的WinDBG扩展命令,例如!sym and !dh,分别设置符号加载诊断和转储模块PE头。看到itoldyouso是小写的,我不禁怀疑它是否是一个未经文档化的WinDBG扩展命令。启动WinDBG并输入!itoldyouso,产生了以下结果: 0:000> !i
阅读全文
摘要:保护总是好的,公司有两台符号服务器。其中一个已不再使用,但为以前发布的项目保留了符号。因为PDB文件和源代码一样重要,所以想知道是否有办法将符号服务器合并在一起。 由于符号服务器是用作数据库的文件系统,存储方案为\ServerShareFile.PDBGUIDFile.PDB,因此可以将资源管理器中
阅读全文
摘要:COM可见的.Net对象由标准COM调用实例化,例如CoCreateInstance。COM在注册表或激活上下文中找到CLSID,加载并调用mscoree.dll,该dll继续激活CLR和创建对象的过程。在此过程中,可能会出现错误0x80131700“未能加载运行时”或0x8013101b“此程序集
阅读全文
摘要:简介 COR_E_NEWER_RUNTIME,值为0x8013101B,代表的意思是"程序集是由比当前加载的运行时新的运行时生成的,因此无法加载。".它定义在cli-2.0-master\clr\src\inc\corerror.h文件里,如下: #define COR_E_NEWER_RUNTIM
阅读全文
摘要:要查看SOS.dll版本,必然是Windbg已经加载了该文件。在这个前提下输入下面的命令: !eeversion 例如: 0:000> !eeversion4.0.30319.36543 retailWorkstation modeSOS Version: 4.0.30319.36543 retai
阅读全文
摘要:当你在分析一些dmp文件时,可能会发现下面的异常信息: 0:000> .exr -1 ExceptionAddress: 00000000 ExceptionCode: 80000003 (Break instruction exception) ExceptionFlags: 00000000 N
阅读全文
摘要:简介 STATUS_INVALID_PARAMETER,值为0xC000000D。代表的意思是把一个无效的参数传递给了服务或函数(这里的服务是指Windows系统自身的服务,函数是指Windows系统内核函数)。它定义在 ntstatus.h头文件里,如下: //// MessageId: STAT
阅读全文
摘要:如果您有一个WER处理过的崩溃进程,但您知道JIT调试器设置错误,或者根本没有设置(因此崩溃对话框上没有“调试”按钮),则可以保持对话框打开,并将您选择的任何调试器附加到挂起的崩溃进程。不过,有个问题。通过将调试器附加到挂起的进程,进程的最后异常信息已丢失;这是因为调试器成功附加到挂起(或挂起)进程
阅读全文
摘要:什么是FileNotFoundException? 尝试访问磁盘上不存在的文件失败时引发的异常。如果你的代码没有 PathDiscovery 的权限,则此异常的错误消息可能只包含文件或目录名称,而不是完全限定的路径。 继承 Object Exception IOException FileNotFo
阅读全文
摘要:我一直想知道更多关于这个问题的信息,但运气不太好。我一直在读,应用程序不应该出现这个错误,它不告诉我什么可以导致这个错误出现。我知道这个问题非常宽泛,因为我确信这个错误可能有多种原因,所以我会尽量缩小范围。我在VS2015中开发了一个使用C++ .NET的应用程序。应用程序主要使用非托管代码,很少使
阅读全文
摘要:我的应用程序,一个可执行文件,正在远程计算机上崩溃。我没有访问那台机器的权限,所以我请求了一个转储,通过任务管理器生成。使用WEBBG,在执行命令!analyze -v时,我可以看到许多其他的文本 EXCEPTION_RECORD: (.exr -1) ExceptionAddress: 00000
阅读全文
摘要:用于配置应用程序崩溃自动调试的注册表项的名称是AeDebug。好吧,很明显“Debug”代表什么,但是“Ae”代表什么? 我无法证明,但间接证据表明AE代表“应用程序错误”。对话框的标题最初是“应用程序错误”。这里有这样的评论: // This fixes the AE (application e
阅读全文
摘要:以栈作为基础的SEH本身具有很大的危险性,我们可以利用各种手段对栈上SEH节点进行覆盖重写,再次执行异常处理操作时就会将执行权给到了我们用来覆盖的函数上,这实际上在以前是很常见的windows栈溢出手段,当然,除了这种方法外还有许许多多的利用手段,可见这样的异常处理机制还是不够完善的。为了解决这些问
阅读全文
摘要:硬件异常可以分为三种: fault(错误),在处理此类异常时,操作系统会将遭遇异常时的“现场”保存下来(比如EIP、CS等寄存器的值),然后将调用相应的异常处理函数,如果对异常的处理成功了(没成功的情况会在下文中提到),那就恢复到原始现场,继续执行。最经典的fault例子莫过于Page Fault了
阅读全文
摘要:你有没有写过不太正确但足够接近的代码?当一切顺利的时候,你是否不得不编写运行良好的代码,但是你不太确定当出了问题时会发生什么?有一个简单的、不正确的语句可能位于您编写或必须维护的代码中:catch (Exception e)。这似乎是无辜和直截了当的,但这个小小的声明会造成很多问题,当它不能做你期望
阅读全文
摘要:看清楚是何种异常导致的崩溃. 对齐symbol, 找到发生崩溃的函数名字, 以及对应的汇编代码和源代码. 列出callstack 检查callstack是否合理 检查发生崩溃的函数是否得到了正确的参数. 检查发生崩溃的函数使用的数据是否正确. 结合上面的信息, 构思来龙去脉, 然后用资料来证明, 或
阅读全文
摘要:怎样打印某函数调用关系 命令功能适用范围 uf /c /D 地址 打印当前函数对其他函数的调用 用户态/内核态 # 函数名 起始地址 l长度 打印在某段地址范围内代码对该函数的引用 内核态/用户态 例1: kd> uf /c /D 0x804fa5e6 nt!KeDelayExecutionThre
阅读全文
摘要:在WinDBG的Command窗口中, 默认情况下, 你输入的命令很容易和该命令以及附近命令的输出混杂在一起. 在寻找之前命令的结果的时候, 眼睛看起来会很累. WinDBG提供了一个选项, 通过这个选项, 你可以把命令输入与输出的颜色进行设置. 选项名: Prompt level command
阅读全文