UPX
<templatestyles src="Module:Hatnote/styles.css"></templatestyles>
Lua error in package.lua at line 80: module 'strict' not found.
File:Ultimate Packer for eXecutebles.png | |
Initial release | May 26, 1998 |
---|---|
Stable release | 3.09.1 (aka. 3.91) / September 30, 2013 |
Written in | C++, Assembly |
Operating system | Microsoft Windows, Linux, Mac OS X, MS-DOS, Atari |
Platform | i386, MIPS, AMD64, ARM, PowerPC, m68k |
Available in | English |
Type | Executable compression |
License | GPL with exception for compressed executables[1] |
Website | upx |
UPX (Ultimate Packer for Executables) is a free and open source executable packer supporting a number of file formats from different operating systems.[2][3]
Compression
UPX uses a data compression algorithm called UCL,[4] which is an open source implementation of portions of the proprietary NRV (Not Really Vanished[5]) algorithm.[6]
UCL has been designed to be simple enough that a decompressor can be implemented in just a few hundred bytes of code. UCL requires no additional memory to be allocated for decompression, a considerable advantage that means that a UPX packed executable usually requires no additional memory.
UPX (since 2.90 beta) can use LZMA on most platforms; however, this is disabled by default for 16-bit due to slow decompression speed on older computers (use --lzma
to force it on).
Starting with version 3.09.1, UPX also supports 64-Bit (x64) executable files on the Windows platform.[7] This feature is currently declared as experimental.
Decompression
UPX supports two mechanisms for decompression: an in-place technique and extraction to temporary file.
The in-place technique, which decompresses the executable into memory, is not possible on all supported platforms. The rest use extraction to temporary file. This procedure involves additional overhead and other disadvantages; however, it allows any executable file format to be packed.
The extraction to temporary file method has several disadvantages:
- Special permissions are ignored, such as suid.
argv[0]
will not be meaningful.- Multiple running instances of the executable are unable to share common segments.
Unmodified UPX packing is often detected and unpacked by antivirus software scanners. UPX also has a built-in feature for unpacking unmodified executables packed with itself. The default license for the existing stubs explicitly forbids modification that prevent manual unpacking.[8] Most antivirus products will raise an alarm when UPX header is detected.[citation needed]
Supported formats
- ARM/PE
- Atari/TOS
- *BSD/i386
- djgpp2/COFF
- dos/com
- dos/exe
- dos/sys
- Linux/i386 a.out
- Linux/ELF on i386, x86-64, ARM, PowerPC
- Linux/kernel on i386, x86-64 and ARM
- Mach-O/ppc32, Mach-O/i386 (even produced by Google Go since 3.09)
- rtm32/PE
- tmt/adam
- PlayStation1/exe
- Watcom/le
- Windows/PE exe files containing native x86 (32-Bit) code
- Windows/PE exe files containing native AMD64 (64-Bit) code – still experimental
UPX does not currently support PE files containing CIL code intended to run on the .NET Framework.
References
<templatestyles src="Reflist/styles.css" />
Cite error: Invalid <references>
tag; parameter "group" is allowed only.
<references />
, or <references group="..." />
External links
- UPX on SourceForge.net
- UPX at Freecode
- ↑ http://upx.sourceforge.net/upx-license.html
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ Lua error in package.lua at line 80: module 'strict' not found.
- ↑ http://www.oberhumer.com/opensource/ucl/
- ↑ http://www.oberhumer.com/products/nrv/
- ↑ http://upx.hg.sourceforge.net/hgweb/upx/upx/file/5d434f4a3fe7/README.SRC
- ↑ http://upx.sourceforge.net/upx-news.txt
- ↑ http://upx.sourceforge.net/upx-license.html