代码之家  ›  专栏  ›  技术社区  ›  Gordon Gustafson

.exe文件中有什么?

  •  33
  • Gordon Gustafson  · 技术社区  · 15 年前

    所以.exe文件是一个可以由Windows执行的文件,但它到底包含什么?特定于处理器的汇编语言?或者是Windows识别的某种中间语句,将其转换为特定处理器的程序集?当文件“执行”时,Windows会对它做什么?

    4 回复  |  直到 7 年前
        1
  •  40
  •   Michael    13 年前

    msdn有一篇文章” An In-Depth Look into the Win32 Portable Executable File Format “它描述了可执行文件的结构。

    基本上,一个.exe包含了几个数据块以及如何将它们加载到内存中的指令。其中一些部分恰好包含可以执行的机器代码(其他部分包含程序数据、资源、重新定位信息、导入信息等)。

    我建议你拿一份 Windows Internals 有关运行exe时发生的情况的完整描述。

    对于本机可执行文件,机器代码是平台特定的。.exe的头指示.exe用于哪个平台。

    运行本机.exe时,会发生以下情况(大大简化):

    • 将创建一个流程对象。
    • exe文件将被读取到该进程的内存中。.exe的不同部分(代码、数据等)分别映射,并赋予不同的权限(代码是执行的,数据是读/写的,常量是只读的)。
    • 重新定位发生在.exe中(如果未在首选地址加载.exe,则会修补地址。)
    • 将遍历导入表并加载依赖dll。
    • DLL以与.exe相似的方法映射,重新定位和加载其依赖的DLL。已解析从dll导入的函数。
    • 进程从ntdll中的初始存根开始执行。
    • 初始加载程序存根为每个dll运行入口点,然后跳到.exe的入口点。

    托管可执行文件包含MSIL(Microsoft中间语言),可以对其进行编译,以便它们可以针对CLR支持的任何CPU。我对clr加载程序的内部工作不太熟悉(本机代码最初运行的目的是引导clr并开始解释msil)——也许其他人可以对此进行详细说明。

        2
  •  12
  •   kctang    15 年前

    我可以告诉您.exe文件的前两个字节包含什么-“mz”。我是说“MZ”这个角色。

    它实际上代表了:马克·兹比科夫斯基。设计了exe文件格式的人。

    http://en.wikipedia.org/wiki/Mark_Zbikowski

        3
  •  9
  •   paxdiablo    15 年前

    1和0!

    This wikipedia link 将为您提供有关用于Windows应用程序的可移植可执行格式所需的所有信息。

        4
  •  1
  •   adrian    7 年前

    exe文件实际上是一种称为可移植可执行文件的文件类型。它包含二进制数据,处理器可以读取并执行(本质上是x86指令)。还有一个 许多 标题数据和其他杂项内容。实际可执行代码位于名为 .text ,并存储为机器指令(特定于处理器)。这个代码(以及.exe的其他部分)被放入内存,CPU被发送到它,在那里它开始执行。(请注意,实际发生的接口更多;这是一个简化的解释)。