실행 파일 압축

실행 파일 압축은 말 그대로 실행 파일을 압축하는 것을 말한다. 수많은 실행 파일 압축 프로그램이 존재하며, 이러한 프로그램들은 MS-DOS 시절부터 존재해왔다. 줄여서 실행 압축이라고도 부른다.

장단점 
소프트웨어 개발자들이 실행 파일 압축을 사용하는 까닭은 많은데, 주로 소프트웨어의 기억 장치의 용량을 줄이는 것이 목적이다. 실행 압축 프로그램의 목적은 실행 코드를 압축하는 것이며 gzip, zip, Bzip2와 같은 표준 데이터 압축 기능보다 더 나은 압축률을 보이고 있다. CD-ROM, DVD-ROM, 플로피 디스크와 같은 용량이 제한된 매체에 쓰이며, 인터넷의 경우 다운로드 시간을 줄이기 위해서 사용되기도 한다.

PE 포맷으로 되어 있는 실행 파일을 압축할 때의 한 가지 장점으로는 보안을 들 수 있다. 어떠한 프로그램 안의 데이터를 분석하는 프로그램을 사용하여 프로그래머가 짠 내용을 분석하지 못하게 막을 수 있다. 한글 패치를 만들 때에도 이러한 프로그램이 이용되기도 한다.

압축된 실행 파일은 파일 시스템의 공간을 덜 차지하기 때문에 파일 시스템으로부터 데이터가 메모리에 전송되는 시간이 덜 걸린다. 한편, 실행 직후 데이터의 압축을 푸는 시간이 좀 걸릴 수 있다. 다만, 다양한 저장 매체의 속도는 평균적인 프로세서 속도를 따라잡지 못했기 때문에 저장 장치는 자주 병목 현상을 겪는다. 그러므로 압축된 실행 파일은 대부분의 시스템에서 더 빨리 실행될 것이다. 일부 대한민국 웹에서는 압축된 실행 파일을 실행할 때 비록 시스템 메모리를 더 잡아먹지만 속도가 빨라진 것을 바로 느낄 수 있다는 의견이 있던 반면, 그렇지 못하는 경우도 많다는 의견도 있었다. 현대의 데스크톱 컴퓨터에서 실행 파일이 비정상적으로 크지 않다면 눈치채기 쉽지 않기 때문에 실행 속도를 빠르게 하는 것이 실행 파일을 압축하는 주된 이유라고 볼 수는 없다.

실행 파일마다 압축 프로그램의 특성을 타는 경우가 있다. 이를테면, UPX로 압축한 실행 파일은 정상 동작하는 반면, ASPack로 압축한 실행 파일은 정상 동작하지 않는 경우가 있고 그 반대의 경우도 있다. 또 이러한 실행 파일 압축 프로그램은 라이브러리 파일도 압축할 수 있으며 이러한 라이브러리 파일도 특성을 탈 수 있다. 따라서 실행 압축을 하기 앞서 백업을 하는 것이 권장되며, 압축을 한 뒤에 적절한 테스트가 요구된다.

디스크의 실행 파일 이미지를 읽는 운영 체제에서(가상 메모리를 참조하라), 압축된 실행 파일은 이러한 작업의 효율성을 떨어트릴 수 있다. 압축 해제 작업은 메모리 블록을 할당하여 압축되지 않은 데이터를 유지한다. 사용 여부에 관계 없이, 함께 실행되고 있는 다른 응용 프로그램의 메모리 리소스를 차지하려 하면서, 실행 파일이 로드되는 한 계속 할당된다. 운영 체제가 스왑 파일을 사용한다면(보통 메모리 부족을 겪지 않기 위해 사용한다), 압축되지 않은 데이터는 단순히 사용하지 않는 데이터 블록을 버린 뒤 실행 파일 이미지로부터 다시 로드하지 않고 메모리의 남은 공간을 넓힌다. 보통 눈에 잘 띄지 않지만, 실행 파일이 동시에 한 번 이상 실행될 때 문제가 될 수 있다.(운영 체제는 이미 로드된 데이터 블록을 다시 사용할 수 없고, 데이터는 새로운 메모리 블록으로 압축이 풀어져야 하며, 사용하지 않는 경우 독립적으로 스웨핑 처리가 되어야 한다.)

또다른 단점으로는 정적 라이브러리 압축 해제 프로그램만 보이는 것처럼, 일부 유틸리티는 런타임 라이브러리 독립을 더 이상 확인하지 않는다는 것이다.

또한, 바이러스 검사 프로그램은 압축된 모든 실행 파일을 바이러스로 판단하는 경우가 있는데 압축 해제 부분이 바이러스에 대한 일부 문자열을 공유하기 때문이다. 요즘 나오는 대부분의 바이러스 검사 프로그램은 몇 가지 실행 압축 계층을 분석하여 내부에 있는 실제의 실행 파일을 검사할 수 있다.

실행 압축은 컴퓨터가 플로피 디스크, 용량이 적은 하드 드라이브가 쓰였을 시절에 많이 쓰였다. 컴퓨터가 같은 크기의 공간에 더 많은 소프트웨어를 담을 수 있게 해 주었고 압축 파일의 해제 과정이 필요 없다는 것이 장점이었다. 그러나 실행 압축은 컴퓨터의 기억 공간이 커짐에 따라 잘 쓰이지 않게 되었다.

실행 압축은 데모씬과 같이 엄청나게 용량이 적은 데모 프로그램을 설계하는 데 이용되기도 한다. 크리클럭()가 그 예로, 용량이 4096 바이트밖에 되지 않는다.

실행 압축 프로그램의 종류 
 UPX - 자유 소프트웨어 : 이 프로그램은 도스, 윈도우용 실행 파일을 압축할 수 있다.
 .netshrink
 ASPack
 CExe
 exe32pack
 eXPressor
 FSG
 MEW – 개발 중단
 NeoLite
 NsPack – .NET
 PECompact
 PEPack
 PELock
 PKLite32
 PEtite
 RLPack
 Shrinker32
 Upack – 프리웨어
 WWPack
 PESpin
 BeRoEXEPacker
 .NETZ – .NET

도스용 실행 파일만 압축할 수 있는 프로그램:
 apack
 diet
 lzexe – 마이크로컴퓨터에서 공식적으로 널리 쓰인 첫 실행 파일 압축 프로그램.
 pklite
 UPX
 wwpack

ELF 파일을 압축할 수 있는 프로그램:
 gzexe
 UPX

같이 보기 
 데이터 압축
 디스크 압축
 실행 파일
 UPX
 자체 압축 풀림 (SFX)

압축 소프트웨어
프로그래밍 도구