我在Delphi 2007上使用madExcept + UPX时遇到问题。
每当我打开压缩的应用程序时,Windows异常对话框就会出现,代码为0xc0000005。
有人对此有解决方案吗?
谢谢!
最佳答案
对异常等进行堆栈跟踪需要将内存中的代码地址映射到可执行文件中存储的虚拟地址,以便可以将它们与.map文件或指示功能或源文件和行的调试信息相关联。通常,映射是直接且相对线性的。
可执行的压缩很糟糕,因为它没有简单的映射,尤其是与PE规范不符的映射。这是因为可执行文件压缩将可执行文件中的初始化例程替换为将从磁盘中提取数据到内存中的初始化例程(这也意味着压缩的可执行文件不与其他实例共享页面,并且比未压缩的可执行文件使用更多的内存,因为它们需要页,一次浏览所有内容),然后再转发到新展开的原始初始化例程。
因此,如果在堆栈跟踪中没有足够巧妙的相对地址存储代码位置,则这两种技术不太可能一起工作。
FWIW,我个人不建议使用可执行打包程序。
关于delphi - madExcept + UPX,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/603130/