2013-03-31 74 views

回答

5

UPX是專爲原生申請。這些是直接編譯到機器碼的應用程序。

針對.NET Framework的可執行文件不是本機應用程序,而是管理的。換句話說,它們在運行時環境(公共語言運行時,或CLR)之上運行,並被編譯爲「中間語言」(IL),直到運行時才編譯爲機器語言(此過程稱爲JIT,或即時編譯)。

UPX可以直接處理非託管機器碼,但它不適用於託管應用程序。如果JIT編譯器經過壓縮並因此無法讀取,它將如何即時編譯應用程序的代碼?它不會;它會看到文件已損壞。

雖然沒有大的損失。今天壓縮可執行文件比缺點有更多的缺點。除此之外,由於託管應用程序被編譯爲IL,所以它們通常比首先等同的非託管應用程序小。

+1

但是你不能解釋爲什麼UPX無法處理託管指令。我確信有一個原因,但你沒有提到它。 「如果CPU壓縮並因此無法讀取,CPU將如何運行本機代碼?它不會;它會看到文件已損壞。」幾乎和UPX爲什麼不能壓縮x86二進制文件一樣好。例如,它可以在IL EXE周圍放置一個真正的EXE,並將IL EXE解壓縮到另一個文件,如https://en.wikipedia.org/wiki/UPX –

+0

我想我已經介紹過了。 UPX直接處理非託管代碼。它解碼,所以它的工作。它不適用於JIT編譯的應用程序,因爲UPX的設計不是預先解壓縮代碼並將其提供給JIT編譯器。是的,我不認爲你有任何技術上的原因不能爲JIT編譯的應用程序編寫打包程序。但是,至少在我寫這個答案時,UPX不是。 –

相關問題