UPX(英語:the Ultimate Packer for eXecutables)是一個自由開源的可執行程式檔案加殼器,支援許多不同作業系統下的可執行檔格式。

Quick Facts 首次發布, 目前版本 ...
UPX
the Ultimate Packer for eXecutables
首次發布1998年5月26日,​26年前​(1998-05-26
目前版本3.96(2020年1月23日,​4年前​(2020-01-23
原始碼庫 編輯維基數據鏈結
程式語言C++組譯
作業系統WindowsLinuxDOSAtari TOSmacOS
類型可執行檔壓縮
許可協定GPL
網站upx.github.io
Close

壓縮

UPX使用一種叫做UCL的壓縮演算法,為NRV(Not Really Vanished)演算法的一個開源部分實做。

得益於UCL的簡單設計,其解壓縮程式碼只需要額外的數百位元組。UCL最大的好處是在解壓縮過程中不需要額外的記憶體,意味著經過UPX壓縮的可執行檔執行時通常也不需要為了解壓縮付出額外記憶體。

UPX(從2.90 beta版本開始)可以在大多數平台上使用LZMA演算法,但因為速度慢,在16位元平台上LZMA演算法預設被停止使用。(可以使用參數--lzma強制使用)。

從版本3.91開始,UPX在Windows平台上還支援64位元(x64)可執行檔。此功能目前宣布為實驗性。

解壓縮

UPX支援兩種解壓方式:就地解壓或解壓至臨時資料夾。

就地解壓方法會直接把可執行檔提取到主記憶體。但這種方式不可能支援所有系統平台,因此在必要之時UPX會使用另一種解壓方式:將壓縮檔案提取到臨時資料夾。這種方式支援封裝任何平台和格式的可執行檔,可執行檔往往先會被提取到一個位置,之後用open()打開。

然而提取到臨時資料夾這種方式除了造成了額外占用之外,還有以下幾個缺點:

  • 特殊權限會被忽略,如設定使用者識別碼。
  • argv[0](即程式中取得到的可執行檔名)將會無效。
  • 多實例應用程式將無法共享共同的程式部分(如主記憶體內的相同代碼)。

未特意以防止解包為目的修改過的UPX包通常能夠被防毒軟體辨識並進行解壓操作。UPX也內建能夠解壓未修改UPX包的功能。在預設的UPX許可證中也明確禁止以防止前文所提及的解包為目的的修改。

支援的格式

UPX目前[何時?]不支援為了在.NET Framework.執行而包含了 CIL代碼的Windows/PE EXE 檔案。

注釋

參考資料

外部連結

Wikiwand in your browser!

Seamless Wikipedia browsing. On steroids.

Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.

Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.