Исполняемый - Executable

А шестнадцатеричный дамп исполняемого файла реальный режим грузчик

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

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

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

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

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

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

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

Исполнение

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

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

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

  1. ^ "исполняемый". Онлайн-словарь Мерриам-Вебстера. Мерриам-Вебстер. Получено 2008-07-19.
  2. ^ «Машинные инструкции». Гики. 2015-11-03. Получено 2019-09-18.
  3. ^ «Глава 4: Объектные файлы». refspecs.linuxbase.org. Получено 2019-09-18.
  4. ^ Фишер, Тим. «Список расширений исполняемых файлов». lifewire.com. Получено 2019-09-18.
  5. ^ Маккеллар, Джессика (16 марта 2010 г.). «Привет из мира без libc! (Часть 1)».
  6. ^ Боелен, Майкл (15.05.2019). "101 файл ELF в Linux: понимание и анализ - Linux ..." Linux Audit. Получено 2019-09-18.

внешняя ссылка