Бинарные файлы и ОС - PullRequest
       11

Бинарные файлы и ОС

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

В настоящее время я изучаю C ++, и есть некоторые (базовые) вещи, о которых я действительно не знаю, и где я не нашел ничего полезного в разных поисковых системах.

  • Так как все операционные системы имеют разные «двоичные форматы» для своих исполняемых файлов (Windows / Linux / Mac) - в чем различия? Я имею в виду, что все они являются двоичными, но есть ли что-нибудь (кроме всех API-интерфейсов ОС), которое действительно отличается?

  • (Windows) Это тупой вопрос - но действительно ли все приложения там только двоичные (и я имею в виду только 0 и 1)? В каком формате они хранятся? (Поскольку вы не видите 0 и 1 во всех текстовых редакторах, но в основном не отображаемые символы)

С наилучшими пожеланиями, ламы

Ответы [ 4 ]

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

Форматы исполняемых файлов для Windows (PE), Linux (ELF), OS / X и т. Д. (MACH-O), как правило, предназначены для решения общих проблем, поэтому все они имеют общие функции. Тем не менее, каждая платформа определяет свой стандарт, поэтому файлы не совместимы между платформами, даже если платформы используют один и тот же тип CPU.

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

Общие черты формата исполняемого файла:

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

Интересно сравнить такие форматы с более простыми форматами, такими как почтенный файл DOS .com, который просто описывает 64К различных «вещей» для загрузки в следующем доступном месте и имеет несколько функций, перечисленных выше .

Двоичные в этом смысле используются для сравнения их с «исходными» файлами, которые написаны в текстовом формате. Двоичный формат просто говорит о том, что они кодируются нетекстовым способом, и на самом деле не имеет отношения к двоичному значению 0 и 1.

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

Исполняемые файлы для Windows / Linux отличаются:

  • Формат заголовков файла, то есть часть файла, которая указывает, где и что находится в остальной части файла;
  • инструкции, необходимые для системных вызовов (прерывания, регистрация содержимого и т. Д.)
  • фактический формат, в котором двоичный код связан вместе; Есть несколько разных для Linux, и я думаю, что и для Windows.

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

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

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

Что касается другой части вашего вопроса, насчет "двоичных форматов": существует несколько форматов для разметки различных частей исполняемого файла, таких как ELF или формат Windows DLL / EXE.Все они точно определяют, где в файле находятся различные части исполняемого файла (т. Е. Где находятся метаданные, где находится таблица символов, где находится точка входа, где находятся статические данные и ресурсы и т. Д.)

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

Наиболее распространенным форматом файлов для Windows является PE ; для Linux это ELF . Они оба содержат в основном одни и те же вещи (сегмент данных, сегмент кода и т. Д.) И отличаются только тем, что были разработаны отдельно.

Следует отметить, что даже если бы и Windows, и Linux использовали один и тот же формат файла, они все равно не могли бы запускать двоичные файлы друг друга, потому что системные API и доступные DLL / SO совершенно разные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...