Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

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

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

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

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

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

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

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

Казнь [ править ]

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

См. Также [ править ]

  • Сравнение форматов исполняемых файлов

Ссылки [ править ]

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

Внешние ссылки [ править ]

  • Формат файла EXE в том, что есть