首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用UPX压缩Windows可执行文件有什么坏处吗?

使用UPX压缩Windows可执行文件有什么坏处吗?
EN

Stack Overflow用户
提问于 2008-12-09 17:53:39
回答 13查看 26.8K关注 0票数 42

我以前使用过UPX来缩小我的Windows可执行文件的大小,但我必须承认,对于任何可能产生的负面副作用,我都是天真的。所有这些包装/拆包的缺点是什么?

是否有人会建议不要对可执行文件进行UPX(例如,在编写DLL、Windows或针对Vista或Win7时)?我用Delphi编写了大部分代码,但我也使用UPX压缩了C/C++可执行文件。

另外,我是而不是,运行UPX是为了保护我的exe不受反汇编程序的影响,只是为了缩小可执行文件的大小,防止草率篡改。

EN

回答 13

Stack Overflow用户

回答已采纳

发布于 2008-12-09 18:11:41

..。使用EXE压缩机有缺点。最值得注意的是:

  • 在启动压缩的EXE/DLL时,所有代码都会一次从磁盘映像解压缩到内存中,如果系统内存不足并被迫访问交换文件,则会导致磁盘崩溃。相反,对于未压缩的EXE/DLL,操作系统根据需要为代码页分配内存(即当它们被执行时)。
  • 压缩EXE/DLL的多个实例在内存中创建多个代码实例。如果您有一个压缩的EXE,其中包含1MB的代码(压缩前),并且用户启动它的5个实例,那么大约4MB的内存将被浪费。同样,如果您有一个1MB的DLL,并且它被5个正在运行的应用程序使用,那么大约4MB的内存将被浪费。对于未压缩的EXE/DLL,代码只存储在内存中一次,并在实例之间共享。

http://www.jrsoftware.org/striprlc.php#execomp

票数 48
EN

Stack Overflow用户

发布于 2008-12-10 10:04:54

我很惊讶,这还没有被提及,但使用UPX包装的可执行文件也增加了从启发式反病毒软件产生假阳性的风险,因为统计上很多恶意软件也使用UPX。

票数 22
EN

Stack Overflow用户

发布于 2008-12-11 13:22:17

有三个缺点:

  1. 整个代码将在虚拟内存中完全解压缩,而在常规EXE或DLL中,只有实际使用的代码才会加载到内存中。如果每次运行时只使用EXE/DLL中的一小部分代码,则这一点尤为重要。
  2. 如果您的DLL和EXE有多个实例正在运行,则它们的代码不能跨实例共享,因此您将使用更多的内存。
  3. 如果您的EXE/DLL已经在缓存中,或者在非常快的存储介质上,或者您正在运行的CPU比较慢,那么您将经历启动速度的降低,因为仍然需要进行解压缩,并且您不会从缩小的大小中受益。对于多次重复调用的EXE来说尤其如此。

因此,如果您的EXE或DLL包含大量资源,则上述缺点更多是一个问题,但是,考虑到可执行文件和可用内存的相对大小,它们实际上可能不是很大的因素,除非您讨论的是许多可执行文件所使用的DLL(如系统DLL)。

若要消除其他答案中的一些不正确信息:

  • UPX不会影响您在受DEP保护的计算机上运行的能力。
  • UPX不会影响主要反病毒软件的能力,因为它们支持UPX压缩的可执行文件(以及其他可执行的压缩格式)。
  • UPX已经能够使用LZMA压缩一段时间了(7zip的压缩算法),使用-lzma开关。
票数 15
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/353634

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档