stringtranslate.com

Исполняемый файл

Шестнадцатеричный дамп исполняемого загрузчика реального режима . Первый столбец состоит из адресов первого байта во втором столбце, который содержит байты данных в шестнадцатеричном формате ( первый младший байт ), а последний столбец состоит из соответствующей формы ASCII . [1]

В вычислительной технике исполняемый код , исполняемый файл или исполняемая программа , иногда просто называемые исполняемым или двоичным файлом , заставляют компьютер «выполнять указанные задачи в соответствии с закодированными инструкциями », [2] в отличие от файла данных , который должен быть интерпретированы ( анализированы ) программой, чтобы иметь смысл. [3]

Точная интерпретация зависит от использования. Под «инструкциями» традиционно понимаются инструкции машинного кода для физического процессора . [4] В некоторых контекстах файл, содержащий инструкции сценария (например, байт-код ), также может считаться исполняемым.

Генерация исполняемых файлов

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

Язык высокого уровня компилируется либо в файл исполняемого машинного кода, либо в неисполняемый файл машинного кода – в какой-то объектный файл ; эквивалентный процесс в исходном коде языка ассемблера называется сборкой . Несколько объектных файлов связаны для создания исполняемого файла. Объектные файлы, исполняемые или нет, обычно хранятся в контейнерном формате , таком как исполняемый и связываемый формат (ELF) или переносимый исполняемый файл (PE), который зависит от операционной системы . [5] Это придает структуру сгенерированному машинному коду, например, разделяя его на такие разделы, как .text (исполняемый код), .data (инициализированные глобальные и статические переменные) и .rodata (данные только для чтения, такие как константы и струны).

Исполняемые файлы обычно также включают в себя систему времени выполнения , которая реализует функции языка времени выполнения (такие как планирование задач , обработка исключений , вызов статических конструкторов и деструкторов и т. д.) и взаимодействие с операционной системой, в частности, передачу аргументов, среды и возврат статуса выхода. вместе с другими функциями запуска и завершения работы, такими как освобождение ресурсов, таких как дескрипторы файлов . Для C это делается путем связывания объекта crt0 , который содержит фактическую точку входа и выполняет настройку и завершение работы путем вызова библиотеки времени выполнения . [6]

Таким образом, исполняемые файлы обычно содержат значительный дополнительный машинный код помимо кода, непосредственно сгенерированного из конкретного исходного кода. В некоторых случаях желательно это опустить, например при разработке встроенных систем, или просто чтобы понять, как работают компиляция, компоновка и загрузка. В C это можно сделать, опустив обычную среду выполнения и вместо этого явно указав сценарий компоновщика, который генерирует точку входа и обрабатывает запуск и завершение работы, например, вызывает mainзапуск и возвращает статус выхода ядру в конце. [7]

Исполнение

Чтобы быть выполненным системой (например, операционной системой , прошивкой [ нужна ссылка ] или загрузчиком ), исполняемый файл должен соответствовать двоичному интерфейсу приложения системы (ABI). В простых интерфейсах файл исполняется путем загрузки его в память, перехода к началу адресного пространства и выполнения оттуда. [8] В более сложных интерфейсах исполняемые файлы имеют дополнительные метаданные, определяющие отдельную точку входа . Например, в ELF точка входа определяется в e_entryполе заголовка, которое указывает адрес (виртуальной) памяти, с которого начинается выполнение. [9] В коллекции компиляторов GNU это поле задается компоновщиком на основе _startсимвола. [10]

Смотрите также

Рекомендации

  1. ^ Челови, Пол (2002). Встроенная кулинарная книга FreeBSD. Эльзевир . стр. 108, 187–188. ISBN 1-5899-5004-6. Проверено 06 марта 2022 г.
  2. ^ «исполняемый файл». Интернет-словарь Мерриам-Вебстера . Мерриам-Вебстер . Проверено 19 июля 2008 г.
  3. ^ Мюллер, Джон Пол (2007). Администрирование Windows из командной строки для Windows Vista, Windows 2003, Windows XP и Windows 2000. John Wiley & Sons . п. 24. ISBN 978-0-470-04616-6. Проверено 6 марта 2023 г.
  4. ^ «Машинные инструкции». Гики для Гиков . 03.11.2015 . Проверено 18 сентября 2019 г.
  5. ^ «Глава 4: Объектные файлы» . refspecs.linuxbase.org . Проверено 18 сентября 2019 г.
  6. ^ Фишер, Тим. «Список расширений исполняемых файлов». lifewire.com . Проверено 18 сентября 2019 г.
  7. ^ МакКеллар, Джессика (16 марта 2010 г.). «Привет из мира, свободного от libc! (Часть 1)».
  8. ^ Смит, Джеймс Э .; Наир, Рави (16 мая 2005 г.). «Архитектура виртуальных машин». Компьютер . 38 (5): 33–34. дои : 10.1109/MC.2005.173.
  9. ^ Руслинг, Дэвид А. (1999). «Глава 4 – Процессы». Ядро Linux . сек. 4.8.1 – ЭЛЬФ . Проверено 6 марта 2023 г.
  10. ^ Пейдж, Дэниел (2009). Практическое введение в компьютерную архитектуру. Springer Science+Business Media . стр. 415–416. ISBN 978-1-84882-255-9. Проверено 6 марта 2023 г.

Внешние ссылки