是否有其他操作系统使用PE文件或至少有机会在将来使用它?

时间:2012-02-23 07:49:38

标签: .net operating-system portable-executable

  

无论您使用哪种编译器编译.NET语言,   结果是一个托管模块。托管模块是标准Windows   便携式可执行(PE)文件,需要CLR才能执行。的“以   未来,其他操作系统可能会使用PE文件格式   井“。

有没有其他人开始支持使用PE文件,或者至少有机会支持它? 除了.NET之外,其他任何框架(J2EE等)都会产生PE吗? PE的对应部分是什么?

2 个答案:

答案 0 :(得分:3)

备注

如果您真的想知道除了Windows支持.NET /托管可执行文件之外的哪些其他平台,那么在询问PE格式时,您的问题有点广泛或有点误导。

PE文件格式基本上就是文件格式。目前,它主要用于两个服务:

  1. (本机)可执行文件在Windows 32位和64位平台上使用的文件格式。
  2. .NET(托管)可执行文件使用的文件格式。
  3. 以下列表包含两种用途的示例。更具体地说,只有Mono使用它,如上面第二种情况(而不是第一种情况)。所有其他人在上面第一个案例的意义上使用它(而不是在第二个案例中)。

    为什么Microsoft选择.NET的PE文件格式?可能,因为他们已经拥有了所有的基础设施(加载等),并且只需要为.NET提供一些东西。例如,使用.NET(在Windows上),不必使用某种加载器命令来启动应用程序,例如java.exe -jar ...python.exe ...,但可以启动并启动它,因为它是本机可执行文件。

    图示过度简化,.NET PE文件只包含一个对mscoree.dll的引用,然后它将作为托管应用程序加载和执行包含的MSIL代码。

    <强>用途

    ReactOS也应该使用PE格式(而不仅仅是.NET程序集的容器), 因为它应该与Microsoft Windows(NT)二进制兼容。

    <强>更新

    实际上,当您使用Google“pe文件格式”时,出现的第一个链接是this Wikipedia article about the PE format。它有一个关于文件格式使用的部分,它基本上包含以下内容:

    • 的ReactOS
    • BeOS R3和SkyOS(历史上;但已移至ELF)
    • MacOS X 10.5(但不与Windows二进制兼容)

    不是真正意义上的真实操作系统,但仍然是:

    • 单声道。这里应注意与其他用途的一两个不同之处
      1. Mono(by default, on Linux you can register it as a non native binary)要求使用mono命令启动应用程序。所以你可以认为在这种情况下它并不是支持PE格式的操作系统(很像它不支持PHP脚本或其他)。但这确实是一个可论证且可能无关紧要的观点。
      2. 它只能处理“for .NET”的PE文件。
    • 仿真器:Wine,HX DOS Extender

    请注意,OS / 2(2.x及更高版本)不使用PE,尽管历史上它可能具有(鉴于它和NT的共同历史)。它使用linear executable file format

答案 1 :(得分:1)

Microsoft .NET与Windows有关,而不是跨平台。 Mono是CLR标准的跨平台实现,它可以在它支持的操作系统(Windows,OS X和许多其他)上执行.NET程序集(PE格式)。

Mono编译器(C#/ VB.NET)还以PE格式发出程序集以与Microsoft .NET兼容。

PE的同行太多了。 Java使用JAR。 Android使用APK。