跳转到内容

UPX

本页使用了标题或全文手工转换
维基百科,自由的百科全书
UPX
the Ultimate Packer for eXecutables
首次发布1998年5月26日,​26年前​(1998-05-26
当前版本3.96(2020年1月23日,​4年前​(2020-01-23
源代码库 編輯維基數據鏈接
编程语言C++汇编
操作系统WindowsLinuxDOSAtari TOSmacOS
类型可执行文件压缩
许可协议GPL
网站upx.github.io

UPX(英語:the Ultimate Packer for eXecutables)是一个自由开源的可执行程序文件加壳器,支持许多不同操作系统下的可执行文件格式。

压缩

[编辑]

UPX使用一种叫做UCL的压缩演算法,為NRV(Not Really Vanished)演算法的一个开源部分實做。

得益于UCL的简单设计,其解压缩程式碼只需要额外的数百位元組。UCL最大的好处是在解压缩过程中不需要额外的記憶體,意味着经过UPX压缩的可执行文件执行时通常也不需要为了解压缩付出额外記憶體。

UPX(从2.90 beta版本开始)可以在大多数平台上使用LZMA演算法,但因为速度慢,在16位元平台上LZMA演算法預設被停止使用。(可以使用参数--lzma强制使用)。

从版本3.91开始,UPX在Windows平台上还支持64位(x64)可执行文件。此功能目前宣布为实验性。

解压缩

[编辑]

UPX支持两种解压方式:就地解压或解压至临时文件夹。

就地解压方法会直接把可执行文件提取到內存。但这种方式不可能支持所有系统平台,因此在必要之时UPX会使用另一种解压方式:將压缩文件提取到临时文件夾。这种方式支持封装任何平台和格式的可执行文件,可执行文件往往先会被提取到一个位置,之后用open()打开。

然而提取到临时文件夹这种方式除了造成了额外占用之外,还有以下几个缺点:

  • 特殊权限会被忽略,如设置用户标识符。
  • argv[0](即程序中获取到的可执行文件名)将会无效。
  • 多实例应用程序将无法共享共同的程序部分(如内存内的相同代码)。

未特意以防止解包为目的修改过的UPX包通常能够被杀毒软件识别并进行解压操作。UPX也内置能够解压未修改UPX包的功能。在默认的UPX许可证中也明确禁止以防止前文所提及的解包为目的的修改。

支持的格式

[编辑]

UPX目前[何时?]不支持为了在.NET Framework.运行而包含了 CIL代码的Windows/PE EXE 文件。

注释

[编辑]
  1. ^ UPX对DOS .COM风格的文件的压缩支持可以扩展到一些其它类似的二进制文件中去。一些FreeDOSEDR-DOS内核文件已经被证实可以进行UPX压缩。
  2. ^ UPX也可以压缩不可执行的二进制文件,只要使用它们的程序或驱动能够识别它们是由UPX压缩并且能够执行在文件中包含的解压缩代码即可。已知的例子是FreeDOS使用的.CPX文件以及被UPX压缩过的.CPI字体文件。
  3. ^ 3.0 3.1 3.2 对于DOS平台,UPX支持特殊选项-8086,以强制嵌入式解压缩器与Intel 8088/8086处理器兼容,这样做之后即使在运行DOS的最早的PC上也可以执行和解压缩压缩文件。

參考資料

[编辑]
  1. ^ 存档副本. [2018-01-30]. (原始内容存档于2022-01-11). 
  2. ^ 存档副本. [2018-01-30]. (原始内容存档于2018-10-05). 

外部链接

[编辑]
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy