stringtranslate.com

Исполняемый

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

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

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

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

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

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

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

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

Исполнение

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

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

Ссылки

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

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