36

所以.exe文件是windows可以执行的文件,但它到底包含什么?特定于处理器的汇编语言?还是某种被 Windows 识别的中间语句,将其转换为特定处理器的程序集?windows在“执行”文件时究竟对文件做了什么?

4

4 回答 4

45

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)——也许其他人可以详细说明这一点。

于 2009-09-30T00:51:37.120 回答
15

我可以告诉你 .exe 文件中的前两个字节包含什么 - 'MZ'。我的意思是字符'MZ'。

它实际上代表:Mark Zbikowski。设计exe文件格式的人。

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

于 2009-09-30T01:03:40.847 回答
11

1和0!

此维基百科链接将为您提供有关用于 Windows 应用程序的可移植可执行文件格式的所有信息。

于 2009-09-30T00:52:09.570 回答
2

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

于 2016-01-17T03:09:19.633 回答