如果.NET可执行文件是PE文件,为什么像UPX这样的所有打包程序“会破坏”它呢?
答案 0 :(得分:5)
UPX专为原生应用程序而设计。这些是直接编译为机器代码的应用程序。
以.NET Framework为目标的可执行文件不是本机应用程序,而是托管。换句话说,它们运行在运行时环境(公共语言运行时或CLR)之上,并被编译为“中间语言”(IL),直到运行时才编译成机器语言(此过程称为JIT,或即时编译)。
UPX可以直接处理非托管机器代码,但它不适用于托管应用程序。如果JIT编译器被压缩并且因此无法读取,它将如何动态编译应用程序的代码?它不会;它会将文件视为已损坏。
但是,没有大的损失。今天压缩可执行文件的缺点多于优点。除此之外,由于托管应用程序被编译为IL,因此它们通常比同等的非托管应用程序小。