Что на самом деле содержит исполняемый файл? - PullRequest
20 голосов
/ 12 января 2010

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

Ответы [ 6 ]

10 голосов
/ 12 января 2010

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

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

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

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

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

10 голосов
/ 12 января 2010

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

8 голосов
/ 12 января 2010

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

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

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

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

4 голосов
/ 12 января 2010

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

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

1 голос
/ 12 января 2010
0 голосов
/ 03 апреля 2016

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

...