UPX

出自Local Chinese Wikipedia
跳至導覽 跳至搜尋

腳本錯誤:沒有「Message box」這個模塊。 Template:NoteTA Template:Infobox Software UPXTemplate:Langx)是一個自由開源的可執行程序文件加殼器,支持許多不同作業系統下的可執行文件格式。

壓縮[編輯]

UPX使用一種叫做UCL的壓縮演算法,為NRV(腳本錯誤:沒有「Lang」這個模塊。)演算法的一個開源部分實做。

得益於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頁面Template:Mark I/styles.css沒有內容。目前[何時?]不支持為了在.NET Framework.運行而包含了 CIL代碼的Windows/PE EXE 文件。

註釋[編輯]

  1. UPX對DOS .COM風格的文件的壓縮支持可以擴展到一些其它類似的二進制文件中去。一些FreeDOSEDR-DOS內核文件已經被證實可以進行UPX壓縮。
  2. UPX也可以壓縮不可執行的二進制文件,只要使用它們的程序或驅動能夠識別它們是由UPX壓縮並且能夠執行在文件中包含的解壓縮代碼即可。已知的例子是FreeDOS使用的.CPX文件以及被UPX壓縮過的.CPI字體文件。
  3. 3.0 3.1 3.2 對於DOS平台,UPX支持特殊選項-8086,以強制嵌入式解壓縮器與Intel 8088/8086處理器兼容,這樣做之後即使在運行DOS的最早的PC上也可以執行和解壓縮壓縮文件。

參考資料[編輯]

外部連結[編輯]

腳本錯誤:沒有「Portal」這個模塊。

Template:Compression Software Implementations