Структура исполняемого файла Windows

Я знаю, что обычно объектный файл имеет разделы кода, данных, кучи и стека.
Но я хочу знать, как это устроено в исполняемых файлах Windows и Linux.
Я искал в Интернете и нашел некоторую структуру.
Я понял, что .text для кода, а .data для глобальных переменных.
Я хочу знать, что такое стек и куча на платформах Linux и Windows?
Кто-нибудь может сказать мне структуру исполняемого файла??

Заранее спасибо...


person Harikrishnan    schedule 17.08.2011    source источник
comment
Для Windows PE/COFF см. stackoverflow.com/questions/ 2856756/   -  person Alex K.    schedule 17.08.2011
comment
У меня действительно есть документ. Это вся спец. Мне просто нужно знать, как устроены разделы. кто-то сказал мне, что одна из причин, по которой мы не можем запускать программы Windows в Linux, заключается в этом. Так что мне просто нужен общий план   -  person Harikrishnan    schedule 17.08.2011
comment
вы не можете запускать exe-файлы в Linux, потому что, скорее всего, exe-файл использует собственный API Microsoft. В этом случае вы должны использовать слой эмуляции, такой как Wine   -  person LordDoskias    schedule 17.08.2011
comment
В порядке. это одна из причин. Но предположим, что у меня есть все API в Windows и в Linux. Могу ли я выполнить его напрямую? Насколько я понимаю, ответ отрицательный, потому что ELF отличается от PE/COFF.   -  person Harikrishnan    schedule 17.08.2011


Ответы (1)


Это спецификация, выпущенная Microsoft:

http://msdn.microsoft.com/en-us/windows/hardware/gg463119

Также это хорошее чтение по этому вопросу: http://msdn.microsoft.com/en-us/magazine/cc301805.aspx

РЕДАКТИРОВАТЬ:

Стек/куча - это структуры в памяти, которые создаются/изменяются во время выполнения, поэтому, по сути, они не находятся в самом файле - они не могут быть. Думайте о них как об особом месте в памяти, где каждая программа может хранить данные времени выполнения, и под данными времени выполнения я имею в виду переменные. вызовы функций, возвращаемые значения и все мельчайшие вещи, которые происходят на низком уровне.

person LordDoskias    schedule 17.08.2011
comment
Спасибо за ответ и указание на мою ошибку. Можете ли вы сказать мне, как Windows размещает стек и кучу в памяти. (Линукс тоже) - person Harikrishnan; 17.08.2011
comment
Для кучи вы должны прочитать об управлении памятью. Для Windows это: amazon.com/Windows%C2% AE-Internals-Including-Windows-Developer/ Для Linux — просто прочитайте исходный код менеджера памяти. Что касается стека - это скорее концепция x86/архитектуры. Вы можете начать здесь - en.wikibooks.org/wiki/X86_Disassembly/The_Stack - person LordDoskias; 17.08.2011