0

我的应用程序崩溃了,我无法调试,因为我们的一位合作伙伴认为使用真正可怕的“CodeMeter”来加密他们的 DLL 是合适的。CodeMeter 许可阻止所有尝试调试包含 CodeMeter 加密 DLL 的应用程序,甚至似乎导致从未处理的异常过滤器调用的 MiniDumpWriteDump 失败(此技术在没有加载此 DLL 的情况下有效)。只有在将加密的 DLL 加载到进程中时才会发生崩溃。

我正在疯狂地尝试调试它并确定是否是加密的 DLL 崩溃了,如果是,我如何向我们的合作伙伴提供足够的诊断信息来解决这个问题。

有什么建议——也许我可以从未处理的异常过滤器中调用一些手动堆栈和模块遍历代码?

CodeMeter 是否具有构建设置,允许我们的合作伙伴生成仍然加密和许可但不会如此积极地破坏调试的构建?

只是为了以防万一有任何疑问,我不是试图破解许可,只是诊断这次崩溃。

4

1 回答 1

0

我使用了一些运行良好的堆栈遍历代码,可以通过传入传递给异常过滤器的 CONTEXT 记录从 SEH 或未处理的异常过滤器中调用这些代码。

堆栈中的地址和前几个异常参数中的潜在地址可以使用DbgHelp 中的 SymFromAddr进行解释,包括模块句柄。添加模块文件名和模块句柄的日志,用于解释堆栈地址与哪些 DLL 相关。

这个特定的崩溃是一个 Visual C++ 异常。通过使用 SymFromAddr 查找异常参数之一的地址来揭示异常的类型。

Raymond Chen 的博客有一些代码用于从异常参数中查找 Visual C++ 异常的类型,但由于某种原因(可能是我自己的错误),我无法让它为我工作。

于 2012-04-11T11:00:55.523 回答