如何在包含反调试器度量的进程中调试崩溃

时间:2012-04-02 13:39:13

标签: visual-studio-debugging postmortem-debugging

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

我疯了,试图调试它并确定它是否是崩溃的加密DLL,如果是,我如何能够为我们的合作伙伴提供足够的诊断信息来解决这个问题。< / p>

任何建议 - 也许我可以从未处理的异常过滤器调用一些手动堆栈和模块行走代码?

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

为了清楚,如果有任何疑问,我不会试图破解许可,只是诊断这次崩溃。

1 个答案:

答案 0 :(得分:0)

我使用了一些效果很好的stack walking code,它可以通过传入传递给异常过滤器的CONTEXT记录从SEH或未处理的异常过滤器调用。

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

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

Raymond Chen的博客从异常参数中获得了finding the type of a Visual C++ exception的一些代码,但由于某种原因(可能是我自己的错误),我无法让它工作。