UPX

UPX(Ultimate Packer for eXecutables)는 여러 운영체제에서 수많은 파일 포맷을 지원하는 오픈 소스 실행 파일 압축 프로그램이다. GNU 일반 공중 사용 허가서를 통해 공개된 자유 소프트웨어이다. 압축, 압축 해제의 기능을 모두 담당한다.

압축 
UPX는 UCL이라는 이름의 데이터 압축 알고리즘을 사용하며, 이 구현은 사유 NRV(Not Really Vanished) 알고리즘의 일부인 오픈 소스로 되어 있다.

2.90 베타 이후부터 UPX는 대부분의 플랫폼을 대상으로 LZMA를 사용할 수 있으나 16비트의 오래된 컴퓨터에서 압축 해제 속도 저하 현상이 일어나기 때문에 기본값으로는 비활성화되어 있다. (강제로 사용하려면 --lzma 사용)

압축 해제 
UPX는 압축 해제를 위해 두 개의 메커니즘을 지원한다.
 인 플레이스(in-place) 테크닉
 임시 파일로의 해제
실행 파일을 메모리로 해제하는 인 플레이스 테크닉은 모든 플랫폼에서 이용이 가능한 것은 아니다. 나머지 플랫폼에서는 임시 파일로의 압축 해제를 사용한다. 이 과정에는 추가적인 오버헤드와 기타 단점들이 동반되지만, 어떠한 실행 파일 포맷도 압축이 가능하게 한다.

임시 파일로 해제는 방식은 몇 가지 단점이 존재한다:
 suid와 같은 특수 권한이 무시된다.
 argv[0]의 의미가 없어진다.
 여러 인스턴스로 실행 중인 실행 프로그램들은 공통된 세그먼트를 공유할 수 없다.

수정되지 않은 UPX 압축이 자주 발견되며 바이러스 검사 소프트웨어 스캐너를 통해 압축이 해제된다. UPX 또한 이미 압축된 미수정 실행 파일들의 압축을 해제할 수 있는 기능이 자체 내장되어 있다.

지원 포맷 
 ARM/pe
 atari/tos
 *BSD/i386
 djgpp2/coff
 dos/com
 dos/exe
 dos/sys
 리눅스/i386 a.out
 리눅스/ELF: i386, x86-64, ARM, 파워PC
 리눅스/커널: i386, x86-64, ARM
 mach/ppc32, mach/i386
 rtm32/pe
 tmt/adam
 ps1/exe
 watcom/le
 win32/pe (닷넷 프레임워크를 사용하여 만든 파일은 제외)

각주

외부 링크 
 
 UPX 소스포지

압축 소프트웨어
1998년 소프트웨어
C++로 작성된 자유 소프트웨어
자유 압축 소프트웨어
어셈블리어 소프트웨어