Каков формат кодирования двоичного файла (файл OBJ, a.out, ELF и т. д.)

Когда я открываю бинарный файл в vim, я вижу мнемонику вместо 0sи 1s. Я полагаю, это связано с тем, что vim по умолчанию открывает файл в режиме ASCII. Правильно ли я понимаю? Каков формат кодирования двоичного файла? Это UTF-8? Я знаю, что xxdвыполнит шестнадцатеричный дамп двоичного файла в Vim. Однако я хотел бы знать, почему vim или любой текстовый редактор не отображает двоичный файл как 0sи 1s.

0
27.06.2020, 11:16
1 ответ

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

В большинстве случаев текстовые редакторы (или редакторы двоичных файлов )предназначены для отображения байтов, поскольку они являются единицей хранения. Если я хочу отредактировать двоичный файл, чтобы он содержал другое значение, для меня полезнее редактировать один байт за раз, а не несколько битов за раз. Например, если я редактирую файл данных, чтобы изменить значение с 1234 на 5678, гораздо проще найти байты 04 d2или d2 04, а затем поменять их местами на 16 2eили 2e 16, чем на самом деле. чтобы найти некоторую серию битов в потоке, который не выровнен по байтам.

Vim, как и многие другие текстовые редакторы, будет открывать бинарные файлы в режиме, использующем одинарную -байтовую кодировку (в Vim, обычноlatin1). Какая кодировка в нем используется, не очень интересно, потому что кодировки символов используются для текстовых данных, то есть данных, которые представляют что-то понятное человеку, а не двоичные данные. Цель использования одиночной байтовой кодировки -состоит в том, что любая последовательность байтов допустима и что при загрузке или сохранении не происходит никаких изменений.

Наконец, имейте в виду, что даже двоичные файлы обычно имеют некоторую структуру, даже если она не так очевидна, как текстовые файлы. Например, файл ELF будет начинаться с байта 0x7f, а затем символов ELF.Затем он будет содержать байты для класса (32 -бит или 64 -бит ), порядка байтов, версии и ABI. Они просто не в формах, которые легко читаются, если вы не знакомы с форматом, в отличие от текстовых файлов.

1
18.03.2021, 23:24

Теги

Похожие вопросы