Подтвердить что ты не робот

Что действительно содержит исполняемый файл?

Что действительно содержит исполняемый файл?.. Он содержит инструкции для процессора в виде опкода и операндов? Если да, то почему у нас разные исполняемые файлы для разных операционных систем?

4b9b3361

Ответ 1

Да, код в виде кодов операций и операндов и данных, конечно. Все, что вы хотите сделать, связано с операционной системой каким-либо образом, зависит от операционной системы, а не от процессора. Вот почему вам нужны разные программы для разных операционных систем. Открытие окна в Windows не выполняется с той же последовательностью инструкций, что и в Linux, и т.д.

Ответ 2

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

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

Однако, чтобы настроить контекст для программы (предоставить ей память, загрузить ее данные, настроить для нее стек), ОС необходимо прочитать исполняемый файл программы и знать некоторые вещи о программе, такие как как данные, которые программа ожидает использовать, размер этих данных, начальные значения, хранящиеся в этой области данных, список кодов операций, которые составляют программу (также называемую текстовой областью процесса), их размер и т.д. Все эти данные и многое другое (отладочная информация, данные только для чтения, такие как жестко закодированные строки в программе, таблицы символов и т.д.) сохраняется в исполняемом файле. Каждая ОС понимает другой формат этого исполняемого файла, так как они ожидают, что вся эта информация будет сохранена в исполняемом файле по-разному. Проверьте ссылки, предоставленные Groo.

Несколько форматов, которые использовались для хранения информации в исполняемом файле, - это ELF и COFF для UNIX-систем и PE в Windows.

P.S. - Не все программы нуждаются в исполняемых форматах. Посмотрите загрузчики в Google. Это специальные программы, которые занимают первый сектор загрузочного раздела на жестком диске и используются для загрузки самой ОС.

Ответ 3

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

Было бы крайне неэффективно, если исполняемый файл попытался реализовать функции, уже предоставленные операционной системой (например, запись на диск, прием ввода), поэтому большое внимание уделяется вызовам функций ОС.

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

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

Ответ 4

Для выполнения любой формы ввода-вывода исполняемый файл должен взаимодействовать с операционной системой с помощью sys-вызовов. в Windows это вызовы для Win32 API и linux/unit, это в основном вызовы posix.

Кроме того, формат исполняемого файла отличается от ОС так же, как PNG файл отличается от файла GIF. данные упорядочены по-разному, и существуют разные заголовки и подзаголовки.

Ответ 6

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