Windows可执行文件结构

3
我知道一般目标文件有代码、数据、堆和栈这些部分。
但我想知道在Windows可执行文件和Linux可执行文件中是如何排列的。
我在网上搜索到了一些结构。
我理解.text是用于代码,.data用于全局变量。
我想知道在Linux和Windows平台上堆和栈在哪里?
有人能告诉我可执行文件的结构吗?
提前感谢...

1
有关Windows PE/COFF,请参见https://dev59.com/wHE85IYBdhLWcg3wRBVU#2856849。 - Alex K.
我实际上已经有了这份文档。它是完整的规范。我只需要知道各个部分是如何排列的。有人告诉我,我们不能在Linux中执行Windows程序的原因之一就是这个。所以我只需要整体概述。 - Harikrishnan
1
在Linux中无法执行exe文件,因为大多数情况下exe文件使用了微软自己的API。在这种情况下,您必须使用模拟层,例如Wine。 - LordDoskias
好的,那是一个原因。但是假设我在Linux中也有Windows中所有的API,我能直接执行它吗?据我理解,答案是否定的,因为ELF与PE/COFF不同。 - Harikrishnan
1个回答

3
这是微软发布的规范: http://msdn.microsoft.com/en-us/windows/hardware/gg463119 此外,这篇文章也是一个好的阅读材料: http://msdn.microsoft.com/en-us/magazine/cc301805.aspx 编辑:
堆栈是在运行时创建/修改的内存结构,因此本质上它们不在文件本身中,无法在文件中找到。把它们看作内存中的特殊位置,每个程序都可以在其中存储运行时数据,这些运行时数据包括变量、函数调用、返回值和所有低级别操作。请注意保留HTML标记。

谢谢你的回答并指出我的错误。你能告诉我Windows如何在内存中放置堆栈和堆(Linux也是如此)吗? - Harikrishnan
对于堆,您需要了解内存管理。对于Windows,可以参考这本书:http://www.amazon.com/Windows%C2%AE-Internals-Including-Windows-Developer/dp/0735625301对于Linux - 只需阅读内存管理器的源代码即可。至于栈,这更多是x86/架构概念。您可以从这里开始 - http://en.wikibooks.org/wiki/X86_Disassembly/The_Stack - LordDoskias

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接