Windows可执行文件结构

Windows可执行文件结构,windows,linux,object-files,Windows,Linux,Object Files,我知道目标文件通常有代码、数据、堆和堆栈部分。 但我想知道这在windows可执行文件和Linux可执行文件中是如何安排的。 我在网上搜索,找到了一些结构 我明白了。文本用于代码和。数据用于全局变量 我想知道Linux和Windows平台中的堆栈和堆是什么 有人能告诉我可执行文件的结构吗 提前感谢…这是Microsoft发布的规范: 这也是一本关于这个主题的好读物: 编辑: 堆栈/堆是在运行时创建/修改的内存结构,因此本质上它们不在文件本身中-它们不可能存在。可以将它们看作是内存中的一个特殊

我知道目标文件通常有代码、数据、堆和堆栈部分。
但我想知道这在windows可执行文件和Linux可执行文件中是如何安排的。
我在网上搜索,找到了一些结构
我明白了。文本用于代码和。数据用于全局变量
我想知道Linux和Windows平台中的堆栈和堆是什么
有人能告诉我可执行文件的结构吗


提前感谢…

这是Microsoft发布的规范:

这也是一本关于这个主题的好读物:

编辑:


堆栈/堆是在运行时创建/修改的内存结构,因此本质上它们不在文件本身中-它们不可能存在。可以将它们看作是内存中的一个特殊位置,每个程序都可以在其中存储运行时数据,我所说的运行时数据是指变量。函数调用、返回值和所有底层出现的细节。

对于windows PE/COFF,请参见我实际拥有的文档。这是整个规格。我只需要知道如何安排部分。有人告诉我,我们不能在linux中执行windows程序的原因之一就是因为这个。所以我只需要整体的大纲,你不能在linux中执行exe,因为很可能exe使用的是微软自己的API。在这种情况下,您必须使用仿真层,如WineOk。这是一个原因。但是假设我在Linux中也有windows中的所有API。我可以直接执行吗?据我所知,答案是否定的,因为ELF与PE/COFF不同。谢谢你的回答并指出我的错误。你能告诉我windows是如何在内存中放置堆栈和堆的吗。(Linux也是)对于堆,您必须阅读有关内存管理的内容。对于windows,有这样一个功能:对于linux,只需阅读内存管理器的源代码。就堆栈而言,这更像是x86/体系结构的概念。你可以从这里开始-