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

Содержимое удалено Содержимое добавлено
Начальный шаблон
 
Нет описания правки
Строка 1:
== Введение ==
'''Исполни́мый (исполня́емый) мо́дуль''', '''исполнимый файл''' ({{lang-en|executable file}}) — [[Файл|файл]], содержащий программу в виде, в котором она может быть (после загрузки в память и настройки по месту) исполнена компьютером.
 
'''Исполни́мый (исполня́емый) мо́дуль''', '''исполнимый файл''' ({{lang-en|executable file}}) — [[Файл|файл]], содержащий программу в виде, в котором она может быть (после загрузки в память и настройки по месту) исполнена компьютером.
Чаще всего он содержит [[Двоичный файл|двоичное]] представление машинных инструкций для определённого [[процессор]]а (по этой причине на программистском сленге в отношении него используют слово '''бинарник''' — кальку с английского [[Двоичный файл|binary]]), но может содержать и инструкции на интерпретируемом [[Язык программирования|языке программирования]], для исполнения которых требуется [[интерпретатор]]. В отношении последних часто используется термин «[[скрипт]]».
 
Чаще всего он содержит [[Двоичный файл|двоичное]] представление машинных инструкций для определённого [[процессор]]апроцессора (по этой причине на программистском сленге в отношении него используют слово '''бинарник''' — кальку с английского [[Двоичный файл|binary]]), но может содержать и инструкции на интерпретируемом [[Язык программирования|языке программирования]], для исполнения которых требуется [[интерпретатор]]. В отношении последних часто используется термин «[[скрипт]]».
Исполнением бинарных файлов занимаются аппаратно- и программно-реализованные машины. К первым относятся [[процессор]]ы — например, семейств [[x86]] или [[SPARC]]. Ко вторым — [[Виртуальная машина|виртуальные машины]], например, [[Java Virtual Machine|виртуальная машина Java]] или [[.NET Framework]]. Формат [[Объектный модуль|бинарного файла]] определяется архитектурой исполняющей его машины. Известны машины, реализованные как аппаратно, так и программно, например, процессоры семейства x86 и виртуальная машина [[VMware]].
 
Исполнением бинарных файлов занимаются аппаратно- и программно-реализованные машины. К первым относятся [[процессор]]ыпроцессоры — например, семейств [[x86]] или [[SPARC]]. Ко вторым — [[Виртуальная машина|виртуальные машины]], например, [[Java Virtual Machine|виртуальная машина Java]] или [[.NET Framework]]. Формат [[Объектный модуль|бинарного файла]] определяется архитектурой исполняющей его машины. Известны машины, реализованные как аппаратно, так и программно, например, процессоры семейства x86 и виртуальная машина [[VMware]].
Статус исполнимости файла чаще всего определяется принятыми соглашениями. Так, в одних [[операционная система|операционных системах]] исполнимые файлы распознаются благодаря соглашению об именовании файлов (например, путём указания в имени [[расширение имени файла|расширения файла]] — <tt>[[.EXE|.exe]]</tt> или <tt>.bin</tt>), тогда как в других исполнимые файлы обладают специфичными [[метаданные|метаданными]] (например, битом разрешения execute в [[UNIX-подобная операционная система|UNIX-подобных операционных системах]]).
 
Статус исполнимости файла чаще всего определяется принятыми соглашениями. Так, в одних [[операционная система|операционных системах]] исполнимые файлы распознаются благодаря соглашению об именовании файлов (например, путём указания в имени [[расширение имени файла|расширения файла]] — <tt>[[.EXE|.exe]]</tt> или <tt>.bin</tt>), тогда как в других исполнимые файлы обладают специфичными [[метаданные|метаданными]] (например, битом разрешения execute в [[UNIX-подобная операционная система|UNIX-подобных операционных системах]]).
В современных компьютерных архитектурах исполнимые файлы содержат большие объемы данных, не являющихся компьютерной программой: описание программного окружения, в котором программа может быть выполнена, данные для [[Отладка программы|отладки программы]], используемые константы, данные, которые могут потребоваться операционной системе для запуска [[Процесс (информатика)|процесса]] (например, рекомендуемый размер [[Куча (нераспределённая память)|кучи]]), и даже описания структур окон графической подсистемы, используемых программой.
 
В современных компьютерных архитектурах исполнимые файлы содержат большие объемы данных, не являющихся компьютерной программой: описание программного окружения, в котором программа может быть выполнена, данные для [[Отладка программы|отладки программы]], используемые константы, данные, которые могут потребоваться операционной системе для запуска [[Процесс (информатика)|процесса]] (например, рекомендуемый размер [[Куча (нераспределённая память)|кучи]]), и даже описания структур окон графической подсистемы, используемых программой.
Зачастую исполнимые файлы содержат вызовы библиотечных [[функция (программирование)|функций]], например, вызовы функций [[операционная система|операционной системы]]. Таким образом, наряду с процессорозависимостью (машинозависимым является любой бинарный исполнимый файл, содержащий [[машинный код]]) исполнимым файлам может быть свойственна зависимость от версии операционной системы и её компонент.
 
Зачастую исполнимые файлы содержат вызовы библиотечных [[функция (программирование)|функций]], например, вызовы функций [[операционная система|операционной системы]]. Таким образом, наряду с процессорозависимостью (машинозависимым является любой бинарный исполнимый файл, содержащий [[машинный код]]) исполнимым файлам может быть свойственна зависимость от версии операционной системы и её компонент.
 
В настоящее время существует большое количество файловых форматов исполняемых файлов для различных операционных систем. При этом документация, хотя и существует, зачастую разрознена или практически недоступна (например, описание формата LX/LE становится найти все сложнее и сложнее). Плюс к этому различные производители программного обеспечения вводят дополнительные расширения, которые, зачастую, становится трудно сопоставить с оригинальным форматом или они взаимоисключающие.
 
Данная работа является попыткой составить единый справочник по работе с исполняемыми файлами, их анализа, разбора и создания исполняемого образа, готового для работы в памяти. Скриптовый формат исполняемых файлов оставим на откуп соответствующих руководств по языкам программирования, а рассмотрим именно двоичные форматы.
 
== Исторический экскурс ==
 
Одним из простейших форматов исполняемых файлов на архитектуре x86 является файл с расширением .COM (здесь и далее при использовании расширений файлов операционных система семейства CP/M будет использоваться запись расширения файла в верхнем регистра, а для операционных систем семейства Unix будет использоваться нижний регистр для суффикса имени файла). Истоки данного формата файла идут из операционной системы CP/M для процессора Intel 8080, известной своей широкой популярностью. Формат файла предполагает использование для создания команд (COM - сокращение от COMMAND), расширяющий базовую функциональность операционной системы.
 
При разработке MS-DOS формат .COM сохранился практически без изменения и обеспечивает совместимость на уровне исходного кода с CP/M. Двоичный формат специфичен для каждого типа процессора. Формат подразумевает исполнение в пределах одного сегмента (64Кб), что не позволяло
 
== См.также ==
Строка 16 ⟶ 27 :
 
== Ссылки ==
[http://ru.wikipedia.org/w/index.php?title=%D0%98%D1%81%D0%BF%D0%BE%D0%BB%D0%BD%D0%B8%D0%BC%D1%8B%D0%B9_%D0%BC%D0%BE%D0%B4%D1%83%D0%BB%D1%8C]