WikiDer > Исполняемый
Выполнение программы |
---|
Общие понятия |
Типы кода |
Стратегии компиляции |
Заметное время выполнения |
|
Известные компиляторы и инструментальные средства |
В вычисление, исполняемый код, запускаемый файл, или исполняемая программа, иногда просто называемый исполняемый файл или же двоичный, заставляет компьютер "выполнять указанные задачи согласно закодированному инструкции",[1] в отличие от файл данных что нужно интерпретировать (разбирается} программой, чтобы иметь смысл.
Точная интерпретация зависит от использования. «Инструкции» традиционно означают Машинный код инструкции для физического ЦПУ.[2] В некоторых случаях файл, содержащий инструкции по написанию сценариев (например, байт-код) также можно считать исполняемым.
Генерация исполняемых файлов
Исполняемые файлы могут быть вручную написаны на машинном языке, хотя гораздо удобнее разрабатывать программное обеспечение как исходный код в язык высокого уровня это легко понять людям. В некоторых случаях исходный код может быть указан в язык ассемблера вместо этого, который остается читаемым человеком, будучи тесно связанным с инструкциями машинного кода.
Язык высокого уровня составлен либо в исполняемый файл машинного кода, либо в неисполняемый машинный код - объектный файл какой-то; эквивалентный процесс в исходном коде на языке ассемблера называется сборка. Несколько объектных файлов связаны для создания исполняемого файла. Объектные файлы - исполняемые или нет - обычно хранятся в формат контейнера, Такие как Исполняемый и связываемый формат (ELF) или Переносимый исполняемый файл (PE), который Операционная система-специфический.[3] Это дает структуру сгенерированному машинному коду, например, разделяя его на разделы, такие как .текст (исполняемый код), .данные (инициализированные глобальные и статические переменные) и .rodata (данные только для чтения, такие как константы и строки).
Исполняемые файлы обычно также включают система времени выполнения, который реализует функции языка среды выполнения (например, планирование задач, Обработка исключений, вызов статических конструкторов и деструкторов и т. д.) и взаимодействия с операционной системой, в частности, передача аргументов, среды и возврата статус выходавместе с другими функциями запуска и завершения работы, такими как освобождение ресурсов, таких как файловые ручки. Для C это делается путем ссылки в crt0 объект, который содержит фактическую точку входа и выполняет настройку и завершение работы, вызывая библиотека времени исполнения.[4]
Таким образом, исполняемые файлы обычно содержат значительный дополнительный машинный код помимо того, который непосредственно генерируется из определенного исходного кода. В некоторых случаях желательно опустить это, например, для разработки встроенных систем или просто для понимания того, как работают компиляция, связывание и загрузка. В C это можно сделать, пропустив обычную среду выполнения и вместо этого явно указав сценарий компоновщика, который генерирует точку входа и обрабатывает запуск и завершение работы, например вызов главный
для запуска и возврата ядра в конце статуса выхода.[5]
Исполнение
Для выполнения системой (например, операционной системой, прошивка, или же загрузчик) исполняемый файл должен соответствовать системному двоичный интерфейс приложения (ABI).[6] В простых интерфейсах файл выполняется путем загрузки его в память, перехода к началу адресного пространства и выполнения оттуда. В более сложных интерфейсах исполняемые файлы имеют дополнительные метаданные, указывающие отдельный входная точка. Например, в ELF точка входа указывается в заголовке e_entry
поле, которое указывает адрес (виртуальной) памяти, с которого следует начать выполнение. В GCC (Коллекция компиляторов GNU) это поле устанавливается компоновщиком на основе _Начните
символ.
Смотрите также
Рекомендации
- ^ "исполняемый". Онлайн-словарь Мерриам-Вебстера. Мерриам-Вебстер. Получено 2008-07-19.
- ^ «Машинные инструкции». Гики. 2015-11-03. Получено 2019-09-18.
- ^ «Глава 4: Объектные файлы». refspecs.linuxbase.org. Получено 2019-09-18.
- ^ Фишер, Тим. «Список расширений исполняемых файлов». lifewire.com. Получено 2019-09-18.
- ^ Маккеллар, Джессика (16 марта 2010 г.). «Привет из мира без libc! (Часть 1)».
- ^ Боелен, Майкл (15.05.2019). "101 файл ELF в Linux: понимание и анализ - Linux ..." Linux Audit. Получено 2019-09-18.
внешняя ссылка
- Формат файла EXE в том, что есть