UPX

UPX
the Ultimate Packer for eXecutables
首次发布1998年5月26日,​26年前​(1998-05-26
当前版本
  • 4.2.4 (2024年5月9日;穩定版本)[1]
編輯維基數據鏈接
源代码库
  • github.com/upx/upx
編輯維基數據鏈接
编程语言C++、汇编
操作系统Windows、Linux、DOS、Atari TOS、macOS
类型可执行文件压缩
许可协议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风格的文件的压缩支持可以扩展到一些其它类似的二进制文件中去。一些FreeDOS 和 EDR-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. ^ Release 4.2.4. 2024年5月9日 [2024年5月25日]. 
  2. ^ 存档副本. [2018-01-30]. (原始内容存档于2022-01-11). 
  3. ^ 存档副本. [2018-01-30]. (原始内容存档于2018-10-05). 

外部链接

  • 自由軟件自由軟件主题
  • UPX: the Ultimate Packer for eXecutables (页面存档备份,存于互联网档案馆
  • UCL
  • NRV
  • SourceForge.net上的UPX - a powerful executable packer
  • Freecode英语Freecode上的UPX
压缩软件
比较
自由软件
免費軟體
  • Filzip英语Filzip
  • IZArc
  • LHA
  • StuffIt Expander英语StuffIt Expander(仅解压)
  • TUGZip英语TUGZip
  • ZipGenius英语ZipGenius
  • 2345好压
  • 360压缩
  • Bandizip
商业软件
  • ARC
  • ALZip
  • Archive Utility英语Archive Utility
  • ARJ
  • BetterZip英语BetterZip
  • BulkZip英语BulkZip
  • JAR英语JAR (software)
  • MacBinary英语MacBinary
  • PKZIP/SecureZIP英语PKZIP
  • PowerArchiver英语PowerArchiver
  • StuffIt英语StuffIt
  • WinAce
  • WinRAR
  • WinZip
非归档压缩
常规
  • bzip2
  • compress英语compress
  • gzip
  • lzip英语lzip
  • lzop英语lzop
  • pack英语pack (compression)
  • rzip英语rzip
  • Snappy
  • XZ Utils英语XZ Utils
面向代码
UPX
音频压缩
比较
有损
  • Fraunhofer FDK AAC英语Fraunhofer FDK AAC
  • Nero AAC Codec英语Nero AAC Codec
  • Freeware Advanced Audio Coder (FAAC)英语FAAC
  • Helix DNA Producer英语Helix (multimedia project)
  • l3enc英语l3enc
  • LAME
  • TooLAME英语TooLAME
  • Libavcodec
  • libcelt英语CELT
  • libopus
  • libspeex
  • Musepack
  • libvorbis
  • Windows Media Encoder英语Windows Media Encoder
无损
视频压缩
比较英语Comparison of video codecs
有损
MPEG-4 ASP英语MPEG-4 Part 2
H.264 /
MPEG-4 AVC
HEVC
其他
  • CineForm英语CineForm
  • Cinepak英语Cinepak
  • Daala
  • DNxHD英语DNxHD codec
  • Helix DNA Producer英语Helix (multimedia project)
  • Indeo英语Indeo
  • Libavcodec
  • Schrödinger (Dirac)英语Dirac (video compression format)
  • SBC英语Smart Bitrate Control
  • Sorenson英语Sorenson codec
  • On2 Technologies
  • libtheora
  • libvpx英语libvpx
  • Windows Media Encoder英语Windows Media Encoder
  • AOMedia Video 1
无损
  • FFV1英语FFV1
  • Huffyuv英语Huffyuv
  • Lagarith
  • MSU Lossless英语MSU Lossless Video Codec
  • YULS英语YULS
  • 另見:压缩方法、压缩格式