delphi - madExcept + UPX

标签 delphi madexcept upx

我在Delphi 2007上使用madExcept + UPX时遇到问题。
每当我打开压缩的应用程序时,Windows异常对话框就会出现,代码为0xc0000005。
有人对此有解决方案吗?

谢谢!

最佳答案

对异常等进行堆栈跟踪需要将内存中的代码地址映射到可执行文件中存储的虚拟地址,以便可以将它们与.map文件或指示功能或源文件和行的调试信息相关联。通常,映射是直接且相对线性的。

可执行的压缩很糟糕,因为它没有简单的映射,尤其是与PE规范不符的映射。这是因为可执行文件压缩将可执行文件中的初始化例程替换为将从磁盘中提取数据到内存中的初始化例程(这也意味着压缩的可执行文件不与其他实例共享页面,并且比未压缩的可执行文件使用更多的内存,因为它们需要页,一次浏览所有内容),然后再转发到新展开的原始初始化例程。

因此,如果在堆栈跟踪中没有足够巧妙的相对地址存储代码位置,则这两种技术不太可能一起工作。

FWIW,我个人不建议使用可执行打包程序。

关于delphi - madExcept + UPX,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/603130/

相关文章:

delphi - 如何在不同的缓存上使用TWebbrowser?

delphi - 为什么 Indy 10 会报告内存泄漏?

delphi - Indy 在 POST 重定向后使用 GET 发送参数

multithreading - 在 Delphi 中的每个内核中运行线程

delphi - 为什么我的Delphi 7调试器会随机决定停止接受某些键盘输入

delphi - MadExcept for delphi 在应用程序崩溃后不打印堆栈跟踪

delphi - 将调用堆栈记录到文件中

c++ - Boost 线程和 UPX 压缩 == 不是有效的 win32 应用程序?