2010-01-10 2 views
3

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

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

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

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

+0

Вы греческий? Если это так, «приветствует» прямо на вас! –

ответ

7

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

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

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

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

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

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

7

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

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

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

+0

Вы наверху! Я бы не смог представить такую ​​тему без упоминания баса плотины! – alemjerus

4

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

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

2

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

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

Смежные вопросы