加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

解码抛出的C异常的参数(0xE06D7363)

发布时间:2020-12-16 05:50:46 所属栏目:百科 来源:网络整理
导读:我有一个崩溃转储文件(我的32位 Windows应用程序在客户计算机上崩溃).异常代码为0xE06D7363.所以,我发现这个 article从MSDN博客关于解码异常参数.但是文章中的食谱对我来说并不奏效: 0:000 .exr -1 ExceptionAddress: 753ad36f (KERNELBASE!RaiseException+
我有一个崩溃转储文件(我的32位 Windows应用程序在客户计算机上崩溃).异常代码为0xE06D7363.所以,我发现这个 article从MSDN博客关于解码异常参数.但是文章中的食谱对我来说并不奏效:
0:000> .exr -1 
ExceptionAddress: 753ad36f (KERNELBASE!RaiseException+0x00000058)
   ExceptionCode: e06d7363 (C++ EH exception)
  ExceptionFlags: 00000001
NumberParameters: 3
   Parameter[0]: 19930520
   Parameter[1]: 0052ccd8
   Parameter[2]: 564099d8
0:000> dd 564099d8 l4
564099d8  00000000 00000000 00000000 564099d0
0:000> dd 564099d0 l2
564099d0  00000001 564099b4
0:000> dd 564099b4 l2
564099b4  00000001 56454aec
0:000> da 56454aec+8
56454af4  "????????????????????????????????"
56454b14  "????????????????????????????????"
56454b34  "????????????????????????????????"
56454b54  "????????????????????????????????"
56454b74  "????????????????????????????????"
56454b94  "????????????????????????????????"
56454bb4  "????????????????????????????????"
56454bd4  "????????????????????????????????"
56454bf4  "????????????????????????????????"
56454c14  "????????????????????????????????"
56454c34  "????????????????????????????????"
56454c54  "????????????????????????????????"

我该如何使这个方法工作?或者也可能有其他方法来分析崩溃转储与此异常?

以下是一些来自!analyze -v的信息:

PROCESS_NAME:  ArcMap.exe
MODULE_NAME: arcmap
FAULTING_MODULE: 76fa0000 ntdll
DEBUG_FLR_IMAGE_TIMESTAMP:  4e793643
ERROR_CODE: (NTSTATUS) 0xe06d7363 - <Unable to get error code text>
EXCEPTION_CODE: (NTSTATUS) 0xe06d7363 - <Unable to get error code text>
EXCEPTION_PARAMETER1:  19930520
EXCEPTION_PARAMETER2:  0052ccd8
EXCEPTION_PARAMETER3:  564099d8

解决方法

有很多技术细节.我可以给你方向.

第二个异常参数(0052ccd8)是一个指向_s__ThrowInfo结构的指针,它描述了抛出的类型.第三个参数(564099d8)是一个指向抛出对象的指针.

首先让我们讨论抛出的对象类型. _s__ThrowInfo指向一个常量结构(在编译时生成),它驻留在您的可执行文件(EXE或DLL)中,它被映射到进程地址空间中.

如果全局内存包含在您的崩溃转储中 – 那么您可以在那里找到它.否则你可能从可执行文件中推断出它.从您的可执行文件中减去“基础”地址(假设它已被加载到其首选地址),您将在可执行文件中获得此结构的偏移量.

从这个结构解码实际类型是很棘手的.它包括有关可能被转换为(C多态)的类型的信息,加上解析器(destructor),以防万一它们是非平凡的类型(具有非平凡的类型),并且它被抛出by-value.
可以转换的类型表包含指向描述这些类型的适当结构的指针.其中有这些类型的文字“编码”.

有关这些结构布局的信息可以找到here:

接下来,抛出的对象.它的地址通常属于堆栈内存(严格来说这不是强制性的,可能会抛出全局或动态分配(堆上)对象,但通常不是这样).如果您的崩溃转储中包含堆栈,您将看到对象布局.再加上你将会(希望)意识到它的意思.

如果您的崩溃转储中没有堆栈内存,则无法恢复该对象.

此外,您的对象可能包含指向其他东西(如字符串或其他对象)的指针,可能不一定在堆栈上分配.很可能你不会意识到这些成员,除非你有全内存转储.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读