2009-09-30 89 views
32

因此,一个.exe文件是一个可以由Windows执行的文件,但它包含了什么?汇编语言是处理器特定的?或者某种中间语句被windows所识别,并将其转换为特定处理器的汇编语言?当它“执行”它时,窗口对文件做了什么?.exe文件包含什么内容?

回答

39

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

+0

该死的,打我吧! :) – 2009-09-30 00:53:14

9

1和0的!

This wikipedia link将为您提供有关用于Windows应用程序的便携式可执行文件格式所需的全部信息。

+0

我刚刚低估了你的一个愚蠢的答案,直到我看到“这”实际上是一个链接,而不是对“1和0”的引用。希望你不要介意我是否编辑它使它更清晰 – paxdiablo 2009-09-30 01:43:14

+5

在我的日子里,我们没有1s我们必须做0s – 2011-12-20 17:08:57

12

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

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

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

+4

可爱和有趣的(我肯定会跟随该链接),但不与手头的问题非常相关。 – Twisol 2009-09-30 01:06:04

+0

是的,虽然是一个有趣的代码片段,但它只能解释PE文件的前两个字节。这不是很多,百分比。 – paxdiablo 2009-09-30 02:06:20

+0

出于好奇:他是否为微软设计过它? – MasterMastic 2015-03-13 17:09:49

1

的EXE文件确实是一种被称为可移植可执行文件。它包含二进制数据,可以被处理器读取并执行(基本上是x86指令。)还有一个很多标题数据和其他杂项内容。实际的可执行代码位于名为.text的部分,并作为机器指令(与处理器相关)存储。该代码(以及.EXE的其他部分)被放入内存,并且CPU被发送到它,它开始执行。 (请注意,实际发生的接口更多,这是一个简单的解释)。