2012-03-16 79 views
0

我有一个崩溃转储文件,我想确定发生崩溃的确切指令,更准确地说是'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来确定确切位置吗?

非常感谢您的帮助!

回答

0

,可能有事情做与.net

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

我注意到没有源列。

你可能想要尝试一个带有调试符号的版本(看起来你已经是因为它不是数字)。如果这就是你使用的,嗯。也许唯一剩下的就是开始分析馈入函数的参数,并查看事情发生错误的地方。

我通常从编译我的代码时生成一个.map文件开始。这会在代码库中生成列表/偏移量,通过它你可以确定哪个函数(如果你只是得到一个只有数字的崩溃转储),就会发生崩溃(就像在哪个系统调用中一样)。

猜测为NI:

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