Форматы исполняемых файлов: различия между версиями

Содержимое удалено Содержимое добавлено
Нет описания правки
История форматов ОС семейства CP/M
Строка 21:
Одним из простейших форматов исполняемых файлов на архитектуре x86 является файл с расширением .COM (здесь и далее при использовании расширений файлов операционных система семейства CP/M будет использоваться запись расширения файла в верхнем регистра, а для операционных систем семейства Unix будет использоваться нижний регистр для суффикса имени файла). Истоки данного формата файла идут из операционной системы CP/M для процессора Intel 8080, известной своей широкой популярностью. Формат файла предполагает использование для создания команд (COM - сокращение от COMMAND), расширяющий базовую функциональность операционной системы.
 
При разработке MS-DOS формат .COM сохранился практически без изменения и обеспечивает совместимость на уровне исходного кода с CP/M. Двоичный формат специфичен для каждого типа процессора. Формат подразумевает исполнение в пределах одного сегмента (64Кб), что не позволяло использовать возможности оперативной памяти в полной мере.
 
Формат .EXE появился в QDOS/86-DOS (позднее продаваемой под брендом MS-DOS) в 1981 году и был разработан Марком Збиковски (Mark Zbikowski), о чем свидетельствует сигнатура MZ (или ZM в некоторых старых версиях редакторов обратных связей) в первых двух байтах файла. В отличие от формата .COM, где для кода, данных и стека используется один и тот же сегмент, в формате .EXE были сняты данные ограничения, что делало доступным все адресное пространство компьютера.
 
Развитие машин класса IBM PC привело к появлению новых режимов адресации, появлению виртуальной памяти и прочих механизмов, что делало формат .EXE MZ недостаточно гибким и не приспособленным к реалиям. В частности, многие производители реализовывали так называемые оверлеи, что позволяло осуществлять простейшую подкачку нужных функций в ОЗУ. Плюс, неэффективное использование повторяющегося исполняемого кода привело к реализации библиотек динамического связывания, код которых мог использоваться различными процессами без его дублирования в физической памяти. В итоге формат .EXE был расширен и были реализованы его более современные версии LX/LE и NE.
 
Формат .EXE NE был разработан Microsoft для применения в операционной системе OS/2 и оболочки Windows. Данный формат ориентирован, как и .EXE MZ, на 16-разрядные среды исполнения. Основная дополнительная функциональность, обеспечиваемая данным форматом - это поддержка .DLL.
 
С приходом на рынок микропроцессоров 386+ возникла необходимость поддержки 32-разрядного кода, что, естественно, привело к появлению такого формата, как LE (использовался в оболочках семейства Windows 3.x и операционных систем семейства Windows 9x) и LX (использовался в операционной системе OS/2). Данные форматы позволили смешивать как 16-битный код, так и 32-битных. Кроме смешанного кода переходной период также потребовал реализации такого механизма, как thunking, что также наложило отпечаток на данные форматы файлов.
 
При разработке OS/2 NT 3.0 (в последующем - Windows NT 3.51) был разработан формат .EXE PE, который был предназначен для хранения кода ориентированного на различные аппаратные платформы. В настоящее время данный формат является основным для семейства операционных систем Windows.
 
В кроссплатформенной OS/2 (OS/2 PPC, Workstation OS) конечным форматом файлы был принят формат ELF, о котором будет сказано несколько дальше.
 
В мире операционных систем семейства Unix также наблюдалось развитие форматов исполняемых файлов...
 
a.out, COFF, ELF
 
 
 
== См.также ==