UPX (ultimate packer for executables)は様々なOSのファイル形式に対応したFOSSの実行ファイル圧縮ソフトウェアである。
圧縮
UPXはUCLhttp://www.oberhumer.com/opensource/ucl/ と呼ばれるデータ圧縮アルゴリズムを用いている。UCLはプロプライエタリなNRV (Not Really Vanishedhttp://www.oberhumer.com/products/nrv/) アルゴリズムの一部をオープンソースで実装したものであるhttp://upx.hg.sourceforge.net/hgweb/upx/upx/file/5d434f4a3fe7/README.SRC。
UCLは解凍用のコードがわずか数百バイトで実装できるようなシンプルな設計となっている。UCLは解凍のための追加のメモリ割り当てを要求しない。このことはUPXで圧縮された実行ファイルが余計なメモリを要求しないことを意味し、明確な優位点となっている。
UPX(2.90 beta以上)では多くのプラットフォームでLZMAが利用可能になっている。しかし、古いコンピュータでは解凍速度が遅いので16ビット環境ではデフォルトで無効化されている(--lzmaオプションを用いると強制的に有効化できる)。
解凍
UPXは解凍のための2つの方法を有している。イン・プレース手法と一時ファイルへの展開である。
イン・プレース手法は、メモリ上へ実行ファイルの解凍を行うが、UPXでサポートされているすべてのプラットフォームにおいて利用できるわけではない。イン・プレース手法が利用できない場合は一時ファイルへの展開が行われる。この方法には余分なオーバーヘッドと欠点がある。しかし、いかなる実行ファイル形式でも圧縮することができる。
一時ファイルへの展開を行う手法はいくつかの欠点がある suidのような特別なアクセス権限は無視される。 argvは無意味である。 アプリケーションは共通セグメントを共有できない。
UPXによって圧縮された改変されていないファイルは大抵、アンチウイルスソフトウェアによって検出され、解凍される。UPXはUPX自身で圧縮された改変されていない実行ファイルを解凍する機能も有している。
サポートされているフォーマット
ARM/PE Atari/tos *BSD /i386 djgpp2/COFF dos/com dos/exe dos/sys Linux/i386 a.out i386、x86-64、ARM、PowerPC上のLinux/ELF i386、x86-64、ARM上のLinux/kernel Mach-O/ppc32、Mach-O/i386 (Google Goを用いて生成されたものを除く) rtm32/PE tmt/adam PlayStation1/exe Watcom/le Win32/PE (.NET Frameworkを用いて作られたファイルを除く)
脚注
外部リンク