2013-03-31 379 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不是。 –

相关问题