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 找出确切的位置吗?

非常感谢您的帮助!

4

1 回答 1

0

这可能与.Net有关

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

我注意到没有源列。

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

我通常在编译代码时首先生成一个 .map 文件。这会在代码库中生成 /offsets/ 列表,您可以使用它来确定崩溃发生在哪个函数(如果您只是得到一个只有数字的 crashdump)。(比如可能在哪个系统调用中)。

ni的猜测:

  • 网络接口
  • .net 界面(我的猜测)
  • 非-?
  • ?-idl(怀疑这一点,IDL/MIDL 通常指定接口,不用于大多数最终用户开发人员,除非您正在创建接口)
于 2013-01-13T06:32:22.947 回答