崩溃转储分析:如何查找导致崩溃的模块和指令

时间:2012-03-16 20:48:54

标签: crash-dumps ildasm

我有一个崩溃转储文件,我想确定发生崩溃的确切指令,更准确地说是'System_Messaging_ni + 60e4e',因为我怀疑MSMQ问题。

Function                                     Arg 1     Arg 2     Arg 3   Source 
KERNELBASE!RaiseException+58                 e0434f4d     00000001     00000001    
mscorwks!GetMetaDataInternalInterface+300e1  015c95dc     00000000     00000000    
mscorwks!GetMetaDataInternalInterface+29d15  00000000     00000000     0164d854    
System_Messaging_ni+814aa                    00000000     00000000     0141aeb0    
System_Messaging_ni+60e4e                    0061ec0c     73d2f845     8e1d9768    
mscorwks+f830                                01611664     09d4f328     734402ff 

我的理解是'System_Messaging_ni + 60e4e'表示'从模块'System_Messaging_ni'开始的字节偏移0x60e4e处的指令。

如何确定'System_Messaging_ni'引用的确切DLL文件?我在我的系统中找不到任何System.Message.ni.dll。 _ni后缀是什么意思? 如何判断偏移处的指令是IL还是本机代码? 如果指令在IL中,我可以使用ILDASM来查找确切位置吗?

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

可能与.Net

有关

我知道这些数字都是十六进制的。

我注意到没有源列。

你可能想尝试一个带有调试符号的版本(看起来你已经是因为它不仅仅是数字)。如果这就是你正在使用的,嗯。也许唯一剩下的就是开始分析输入函数的参数,看看出了什么问题。

我通常在编译代码时生成一个.map文件。这会生成列表/偏移量/进入代码库,您可以使用它来确定哪个函数(如果你刚刚获得只有数字的故障转储)发生了崩溃。(比如可能在哪个系统调用中)。

对ni的猜测:

  • 网络接口
  • .net界面(我猜)
  • 非 - ?
  • ? - idl(怀疑这一点,IDL / MIDL通常指定接口,除非您正在创建接口,否则不会用于大多数最终用户开发人员)