Как исполнить исполняемый файл и что это значит

0
0

Многие пользователи ежедневно сталкиваются с исполнением различных исполняемых файлов на компьютере. Но что это такое и как это работает? Давайте разберемся!

Что такое исполняемый файл и его основные характеристики

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

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

Под «инструкциями» понимается машинный код, который выполняется физическим процессором напрямую. Иногда исполняемыми считаются также файлы со сценариями на промежуточных языках (например, Java bytecode).

Хакер за компьютером

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

Наиболее распространенными расширениями исполняемых файлов являются:

  • .exe — в операционных системах Windows;
  • .com — в DOS;
  • .bat — пакетные файлы в Windows;
  • .app — в macOS;
  • без расширения — в Linux.

Структура исполняемого файла

Исполняемые файлы имеют определенную структуру и состоят из нескольких частей:

  1. Заголовок с метаданными;
  2. Секция кода (сам машинный код программы);
  3. Секция данных (глобальные переменные);
  4. Секция ресурсов (иконки, изображения, звуки).

Для хранения этих данных используются специальные форматы контейнеров: PE, ELF, Mach-O и другие в зависимости от платформы.

Футуристический ночной город

Отличие от других типов файлов

В отличие от текстовых файлов, графических, звуковых и видеофайлов, исполняемые файлы:

  • Предназначены для непосредственного выполнения процессором;
  • Содержат машинный код в двоичном виде;
  • Могут управлять работой аппаратного обеспечения.
Тип файла Читает Содержание
Текстовый Человек Символы
Исполняемый Процессор Машинный код

Таким образом, исполнить исполняемый файл — это запустить на выполнение набор инструкций процессора, хранящийся в двоичном файле специального формата.

Как происходит запуск исполняемого файла

Процесс запуска любого исполняемого файла включает в себя несколько этапов.

Загрузка файла в оперативную память

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

Инициализация библиотек и среды выполнения

Далее происходит инициализация внешних библиотек и среды выполнения языка, от которого зависит программа. Например, для программ на Си это стандартная библиотека языка, планировщик задач, обработчик исключений.

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

Передача управления на точку входа

После инициализации всех компонентов управление передается на точку входа - адрес в памяти, с которого начинается выполнение кода программы. В формате ELF эта точка задается в заголовке исполняемого файла.

Вызов основной функции программы

Начиная с точки входа, вызывается главная функция программы, обычно называемая main(). В ней уже содержится основной код приложения, написанный программистом на выбранном языке.

Возврат управления в операционную систему

После завершения работы функции main(), управление возвращается обратно в операционную систему, происходит освобождение выделенной памяти. Таким образом исполняется исполняемый файл.

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

Создание исполняемых файлов

Для того, чтобы исполнить исполняемый файл программы, его необходимо как-то создать. Этот процесс называется сборкой.

Компиляция исходного кода

Первым этапом является компиляция исходного кода программы, написанного на языках программирования высокого уровня (Си, C++, Паскаль и др.). Компилятор транслирует исходный текст в объектный код (обычно в машинные инструкции) и помещает его в отдельный объектный файл.

Компоновка объектных файлов

Затем с помощью компоновщика (линкера) объектные файлы, полученные после компиляции, объединяются в единый исполняемый модуль. При этом разрешаются ссылки между разными частями программы.

Добавление библиотек

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

Формирование исполняемого файла

После того как все модули собраны воедино, формируется конечный исполняемый файл заданного формата (EXE, ELF), готовый для запуска на выполнение. Таким образом достигается цель - исполнить исполняемый файл.