UPX
初版 | 1998年5月26日 |
---|---|
最新版 |
4.2.2
/ 2024年1月3日 |
リポジトリ | |
プログラミング 言語 | C++, アセンブリ |
対応OS | Windows, Linux, macOS, DOS, Atari |
プラットフォーム | i386, MIPS, AMD64, ARM, PPC, m68k |
対応言語 | 英語 |
種別 | 実行ファイル圧縮 |
ライセンス | 圧縮された実行ファイルを例外とするGPL[1] |
公式サイト |
upx |
UPX (ultimate packer for executables)は様々なOSのファイル形式に対応したFLOSSの実行ファイル圧縮ソフトウェアである。
圧縮
[編集]UPXはUCL[2] と呼ばれるデータ圧縮アルゴリズムを用いている。UCLはプロプライエタリなNRV (Not Really Vanished[3]) アルゴリズムの一部をオープンソースで実装したものである[4]。
UCLは解凍用のコードがわずか数百バイトで実装できるようなシンプルな設計となっている。UCLは解凍のための追加のメモリ割り当てを要求しない。このことはUPXで圧縮された実行ファイルが余計なメモリを要求しないことを意味し、明確な優位点となっている。
UPX(2.90 beta以上)では多くのプラットフォームでLZMAが利用可能になっている。しかし、古いコンピュータでは解凍速度が遅いので16ビット環境ではデフォルトで無効化されている(--lzma
オプションを用いると強制的に有効化できる)。
解凍
[編集]UPXは解凍のための2つの方法を有している。イン・プレース手法と一時ファイルへの展開である。
イン・プレース手法は、メモリ上へ実行ファイルの解凍を行うが、UPXでサポートされているすべてのプラットフォームにおいて利用できるわけではない。イン・プレース手法が利用できない場合は一時ファイルへの展開が行われる。この方法には余分なオーバーヘッドと欠点がある。しかし、いかなる実行ファイル形式でも圧縮することができる。
一時ファイルへの展開を行う手法はいくつかの欠点がある
- suidのような特別なアクセス権限は無視される。
argv[0]
は無意味である。- アプリケーションは共通セグメントを共有できない。
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を用いて作られたファイルを除く)