为什么';UPX是否适用于.NET可执行文件?

为什么';UPX是否适用于.NET可执行文件?,.net,compression,executable,portable-executable,.net,Compression,Executable,Portable Executable,如果.NET可执行文件是PE文件,为什么像UPX这样的所有打包程序都会“破坏”它?UPX是为本机应用程序设计的。这些是直接编译为机器代码的应用程序 针对.NET Framework的可执行文件不是本机应用程序,而是托管应用程序。换句话说,它们运行在运行时环境(公共语言运行时,或CLR)之上,并被编译成“中间语言”(IL),直到运行时才被编译成机器语言(该过程称为JIT,或即时编译) UPX可以直接处理非托管机器代码,但它不适用于托管应用程序。如果应用程序的代码是压缩的,因此不可读,JIT编译器将

如果.NET可执行文件是PE文件,为什么像UPX这样的所有打包程序都会“破坏”它?

UPX是为本机应用程序设计的。这些是直接编译为机器代码的应用程序

针对.NET Framework的可执行文件不是本机应用程序,而是托管应用程序。换句话说,它们运行在运行时环境(公共语言运行时,或CLR)之上,并被编译成“中间语言”(IL),直到运行时才被编译成机器语言(该过程称为JIT,或即时编译)

UPX可以直接处理非托管机器代码,但它不适用于托管应用程序。如果应用程序的代码是压缩的,因此不可读,JIT编译器将如何动态编译它?不会的;它将看到文件已损坏


不过,没什么大损失。现在压缩可执行文件的缺点比优点多。除此之外,由于托管应用程序被编译为IL,它们通常比同等的非托管应用程序小。

我猜您在使用“UPX”首字母缩写时谈论的是“”,但您没有解释为什么UPX也不能处理托管指令。我相信这是有原因的,但你没提。“如果本机代码被压缩,因此无法读取,CPU将如何运行?不会;它将看到文件已损坏。”这几乎是UPX无法压缩x86二进制文件的一个很好的论据。例如,它可以在IL EXE周围放置一个真正的EXE,并将IL EXE解压缩到另一个文件中,正如我想我已经讨论过的那样。UPX直接处理非托管代码。它进行解码,所以它工作。它不适用于JIT编译的应用程序,因为UPX的设计目的不是提前解压缩代码并将其提供给JIT编译器。是的,我认为没有任何技术原因可以解释为什么不能为JIT编译的应用程序编写打包程序。但是,至少在我写下这个答案时,UPX并不是这样的。“今天压缩可执行文件的缺点多于优点。”