我在Delphi2007上使用madExcept + UPX时遇到了问题。每当我打开压缩应用程序时,都会出现Windows异常对话框,代码为0xc0000005。有人有解决这个问题的办法吗?
谢谢!
发布于 2009-03-02 20:27:53
堆栈跟踪异常等需要将内存中的代码地址映射到存储在可执行文件中的虚拟地址,以便它们可以与指示函数或源文件和行的.map文件或调试信息相关联。通常,映射是直接的,并且是相对线性的。
可执行压缩搞砸了这一点,因为它没有直接的映射,特别是不符合PE规范的映射。这是因为在转发到新扩展的原始初始化例程之前,可执行文件压缩将可执行文件中的初始化例程替换为将数据从磁盘提取到内存中的例程(这也意味着压缩的可执行文件不与其他实例共享页面,并且比未压缩的可执行文件使用更多的内存,因为它们需要一次调入所有内容)。
因此,如果堆栈跟踪中没有非常巧妙的代码位置的相对地址存储,这两种技术就不太可能协同工作。
FWIW,我个人不推荐使用可执行打包程序。
发布于 2009-05-05 19:27:06
它已经在MadShi自己的论坛中被报道过了:
Forum Article #1
Forum Article #2
周围还有一打其他的话题,但总而言之,UPX3。*和之后是已知的工作与MadExcept,下面就不行了。
发布于 2009-03-02 17:18:12
异常代码通常意味着它是一个未处理的外部异常。如果你不使用UPX会发生什么?异常会消失吗?
它可能与MadExcept,BTW无关。该异常代码通常表示异常发生在VCL的异常处理程序可以设置之前,因此很可能是在MadExcept被挂起之前。
编辑:从您的评论来看,UPX的压缩技术可能会干扰MadExcept/Delphi连接异常处理程序链的能力。你查过布鲁斯提供的链接了吗?
https://stackoverflow.com/questions/603130
复制相似问题