Форматы исполняемых файлов для Windows (PE), Linux (ELF), OS / X и т. Д. (MACH-O), как правило, предназначены для решения общих проблем, поэтому все они имеют общие функции. Тем не менее, каждая платформа определяет свой стандарт, поэтому файлы не совместимы между платформами, даже если платформы используют один и тот же тип CPU.
Форматы исполняемых файлов используются не только для исполняемых файлов, но и для библиотек, которые также содержат код, но никогда не запускаются непосредственно пользователем - загружаются только в память для удовлетворения потребностей в непосредственно исполняемых двоичных файлах.
Общие черты формата исполняемого файла:
- Один или несколько блоков исполняемого кода
- Один или несколько блоков данных только для чтения, таких как текст и цифры
- Один или несколько блоков чтения / записи данных
- Инструкции по размещению этих блоков в памяти при запуске приложения
- Инструкции о том, какие библиотеки (которые также имеют «формат исполняемого файла») также должны быть загружены, и как они подключаются ( ссылка ) к этому исполняемому файлу.
- Одна или несколько таблиц, отображающих код и местоположения данных в строки или идентификаторы, которые их описывают, что полезно для компоновки и отладки.
Интересно сравнить такие форматы с более простыми форматами, такими как почтенный файл DOS .com
, который просто описывает 64К различных «вещей» для загрузки в следующем доступном месте и имеет несколько функций, перечисленных выше .
Двоичные в этом смысле используются для сравнения их с «исходными» файлами, которые написаны в текстовом формате. Двоичный формат просто говорит о том, что они кодируются нетекстовым способом, и на самом деле не имеет отношения к двоичному значению 0 и 1.