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