UPX

UPX（）是一个自由开源的可执行程序文件加壳器，支持许多不同操作系统下的可执行文件格式。

压缩 

UPX使用一种叫做UCL的压缩演算法，為NRV（）演算法的一个开源部分實做。

得益于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许可证中也明确禁止以防止前文所提及的解包为目的的修改。

支持的格式 

 ARM/PE
 Atari/TOS
 *BSD/i386
 DJGPP2/COFF
 DOS/COM (包括某些其它二进制映像)
 DOS/EXE
 DOS/SYS
 Linux/i386 a.out
 Linux/ELF （位于 i386, x86-64, ARM, PowerPC平台）
 Linux/kernel （位于i386, x86-64 and ARM平台） 
 Mach-O/ppc32, Mach-O/i386 (自3.09版本后还支持Google Go创建的此格式程序)
 rtm32/PE (如 Borland C/Pascal compilers编译的程序)
 tmt/adam (如the TMT Pascal compiler编译的程序)
 PlayStation1/EXE
 Watcom/LE (DOS4G、PMODE/W、DOS32A 和 CauseWay)
 包含x86 (32-Bit)代码的Windows/PE EXE 文件
 包含AMD64 (64-Bit)代码的Windows/PE EXE 文件（实验性的）

UPX不支持为了在.NET Framework.运行而包含了 CIL代码的Windows/PE EXE 文件。

注释

參考資料

外部链接 
 
 UPX: the Ultimate Packer for eXecutables 
 UCL
 NRV
 
 

数据压缩软件
SourceForge专案
1998年软件
数据压缩自由软件
組合語言軟體