如果 .NET 可执行文件是 PE 文件,为什么所有像 UPX 这样的打包程序都会“破坏”它?
问问题
4363 次
1 回答
7
UPX 专为本地应用程序而设计。这些是直接编译为机器代码的应用程序。
针对 .NET Framework 的可执行文件不是本机应用程序,而是托管应用程序。换句话说,它们在运行时环境(公共语言运行时,或 CLR)之上运行,并被编译成“中间语言”(IL),直到运行时才编译成机器语言(这个过程称为 JIT,或即时编译)。
UPX 可以直接处理非托管机器代码,但它不适用于托管应用程序。如果应用程序的代码被压缩并因此不可读,JIT 编译器将如何即时编译应用程序的代码?它不会;它会看到文件已损坏。
不过损失不大。今天,压缩可执行文件的缺点多于优点。除此之外,由于托管应用程序被编译为 IL,它们通常比同等的非托管应用程序更小。
于 2013-03-31T12:37:46.413 回答