2016-06-16 1 views
-4

Мне интересно, в каком формате будет создан скомпилированный исходный код программы (например, C или Rust).Файл-формат программы

Я знаю, что выходной файл является двоично-кодированным файлом на машином языке (как объясняется каждый справочник и документация). Я думал, что открытие файла с помощью редактора по моему выбору, такого как VIM, должно показать мне много 1 и 0, не так ли? Но каждый раз, когда я ищу в Интернете эту тему, я только нахожу, как открыть двоичный файл в VI в шестнадцатеричном формате (в основном используя «xxd»).

Нет ли способа увидеть двоичный файл как двоичный файл? -> 100101101111

Каков формат скомпилированной программы?

+2

при открытии бинарного файла с текстовым редактором в вы видите представление '' bytes' не bits' в качестве печатаемых (или не printable-, то вы даже не видите их) символов. –

+3

Поскольку вы упоминаете 'vim' и' xxd', я предполагаю, что вы находитесь в системе POSIX (например, Linux)? Затем прочитайте о [Исполняемый и Связываемый формат] (https://en.wikipedia.org/wiki/Executable_and_Linkable_Format). И мой совет для вас, что вы не должны пытаться разобрать ELF файл самостоятельно, есть библиотеки, которые могут помочь вам, и даже с помощью таких библиотек вы должны думать долго и упорно, прежде чем делать это. А также читайте о [проблеме XY] (http://xyproblem.info), потому что ваш вопрос один: вы говорите нам, что хотите прочитать исполняемый файл, но не говорите нам об исходной проблеме. –

+0

Исполняемый код должен быть * загружен * операционной системой, поэтому код обычно упаковывается в какой-то вид контейнера, который ОС знает, как читать и из которого загрузчик ОС может загружать соответствующие части (данные, код, перемещение, и т.д.). Фактический программный код находится где-то, только не справа наверху. Ближе всего вы можете получить двоичный код чистого кода - это старый [формат MS-DOS '.com'] (https://en.wikipedia.org/wiki/COM_file). –

ответ

1

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

Binary    Witchcraft 
    0000 -->   0 
    0001 -->   1 
    0010 -->   2 
    0011 -->   3 
      ... 
    1110 -->   E 
    1111 -->   F 

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

+1

1997 ??? В самом деле?? –

+0

@EugeneSh .: Да. Вот почему до этого почти не было прогресса в области вычислений. Было просто очень трудно что-то прочитать ... –

+1

Вы, должно быть, шутите. Или я не понимаю вас. Бинарное преобразование в шестнадцатеричное число немного старше. Даже стандарт ASCII намного старше. –

1

Как много людей говорят здесь, вероятно, бесполезно просматривать двоичный файл в двоичной базе, но если вы хотите, xxd - это хороший инструмент для этого (с опцией -b), и вам не нужно vim to использовать:

$ cat my_bin_file | xxd -b 
Смежные вопросы