Что такое текстовое представление двоичных данных? - PullRequest
3 голосов
/ 13 сентября 2009

Иногда, когда вы загружаете скомпилированный двоичный файл с неверным типом MIME или, например, запускаете команду «more» для двоичного файла, вы получаете кучу «garbly gook» из-за отсутствия лучшего термина.

Например, это фрагмент того, что я вижу, когда запускаю «more» из командной строки в очень простой программе на C, скомпилированной с gcc на OS X.

<94>^^^@^@ESC^@^@^@^^^A^@^@<A8>^^^@^@.^@^@^@^N^D^@^@^P ^@^@@^@^@^@^O^D^@^@^L ^@^@H^@^@^@^O^D^@^@^H ^@^@P^@^@^@^O
^D^@^@^@ ^@^@\^@^@^@^C^@^P^@^@^P^@^@p^@^@^@^O^A^@^@b^_^@^@y^@^@^@^O^D^@^@^D ^@^@<82>^@^@^@^O^A^@^@<B6>^^^@^@<88>
^@^@^@^O^A^@^@T^_^@^@<8D>^@^@^@^O^A^@^@T^^^@^@<93>^@^@^@^A^@^A^B^@^@^@^@<99>^@^@^@^A^@^A^B^@^@^@^@^L^@^@^@^M^@^@
^@ ^@dyld_stub_binding_helper^@__dyld_func_lookup^@dyld__mach_header^@_NXArgc^@_NXArgv^@___progname^@__mh_execute
_header^@_average^@_environ^@_main^@_sum^@start^@_exit^@_printf^@^@^@^@

Может кто-нибудь объяснить простыми словами, почему это так? Что происходит, когда текстовый редактор или тип MIM с открытым текстом пытается интерпретировать двоичные данные? Значит ли ^ @ что-нибудь в этом контексте? Почему там какой-то текст и какой-то бред? Существует ли какой-либо стандарт для представления этих двоичных данных в тексте? Почему это не просто 1 и 0?

Я могу концептуально понимать ascii или unicode как представление символов в системе счисления, которое может быть уменьшено до двоичных единиц и 0 и системы счисления, которую понимает процессор. Но на более высоком уровне я пытаюсь понять, что такое двоичные данные. Я думаю, я хочу "увидеть абстракцию", если это имеет смысл.

Есть ли способ "увидеть" двоичные данные в любом виде в текстовом редакторе?

Ответы [ 8 ]

4 голосов
/ 13 сентября 2009

Бинарные файлы и текстовые файлы - это одно и то же для компьютера, ведь все они равны 0 и 1. То, как вы видите содержимое файла, зависит от программы, которую вы используете для его просмотра.
Текстовые редакторы (попробуйте) интерпретируют 0 и 1 в символы и показывают вам символы, которые они получают, которые вы можете просмотреть как документ. Они предполагают, что файлы, которые вы им предоставляете, являются текстовыми файлами, содержащими символы ASCII. Однако это не относится к компьютерным файлам в целом, поскольку они могут содержать любые двоичные данные, которые не обязательно являются символами ASCII. Когда это происходит, вместо того, чтобы выдавать вам сообщение об ошибке, некоторые текстовые редакторы выдают уродливое и неправильное представление данных в файле (так как они все равно не понимают данные).
Шестнадцатеричные редакторы - больше инструмент для гиков, так как они также дают вам компьютерные данные в шестнадцатеричном формате (более читаемый формат по сравнению с двоичным). Некоторые шестнадцатеричные редакторы также дают вам ASCII-символы, которые они обнаруживают, поэтому это событие удобнее.
Алекс дал вам очень классный инструмент командной строки, но если вам нужен GUI, быстрый Google с «hex-редактором» даст вам слишком много программ, которые можно попробовать.

4 голосов
/ 13 сентября 2009

Между текстовыми и двоичными файлами нет существенной разницы, за исключением диапазона значений, используемых в файлах. Каждое значение преобразуется в символ (в основном текстовом редакторе) на основе используемой кодовой страницы (ASCII, ANSI).

Вы видите символ «^ @», потому что значение байта в файле в этой позиции равно 0 (нулевой символ). Нулевой символ не может быть напечатан, и, тем более, программа выводит его в виде каретки.

Вы можете открыть файл в шестнадцатеричном редакторе, который является текстовым редактором, более чувствительным к двоичным данным. Я не очень знаком с программным обеспечением Mac, но бесплатный редактор hex можно загрузить по адресу http://hexedit.sourceforge.net/.

Базовые текстовые редакторы / средства просмотра предполагают, что все, что вы открываете с ним, предназначено для чтения в виде простого текста.

РЕДАКТИРОВАТЬ : исправлены исправления Майка Спросса: ^ @.

3 голосов
/ 13 сентября 2009

Есть ли способ "увидеть" двоичные данные в любой смысл в тексте редактор

Я предлагаю шестнадцатеричный формат! Например, это рекомендации по редактированию бинарных файлов в VIM ...:

ИСПОЛЬЗОВАНИЕ XXD

Настоящий бинарный редактор показывает текст в двумя способами: как есть и в шестнадцатеричном формате. Вы можете сделать это в Vim первым преобразование файла с "xxd" программа. Это идет с Vim. Первый отредактируйте файл в двоичном режиме:

vim -b datafile

Теперь конвертируйте файл в шестнадцатеричный дамп. с xxd:

:% XXD

!

Текст будет выглядеть так:

0000000: 1f8b 0808 39d7 173b 0203 7474 002b 4e49  ....9..;..tt.+NI      
0000010: 4b2c 8660 eb9c ecac c462 eb94 345e 2e30  K,.`.....b..4^.0      
0000020: 373b 2731 0b22 0ca6 c1a2 d669 1035 39d9  7;'1.".....i.59. 

Теперь вы можете просматривать и редактировать текст как тебе нравится. Вим обрабатывает информацию как обычный текст. Изменение гекса не вызывает печатный символ быть измененным, или другим способом вокруг. Наконец преобразовать его обратно с:

:%! Xxd -r

Используются только изменения в шестнадцатеричной части. Изменения в печатной части текста на право игнорируется.

Для получения дополнительной информации см. Справочную страницу xxd. информация.

1 голос
/ 13 сентября 2009

На компьютере все данные хранятся в двоичном виде, включая текстовые файлы. Это означает, что все хранится с использованием двоичных битов. Есть только два возможных двоичных бита: один и ноль.

Текстовый файл должен различать более двух разных символов, поэтому он группирует последовательность двоичных битов в более сложную единицу. Например, последовательность из 8 битов может быть интерпретирована как один символ ASCII (диапазон значений от 0 до 255).

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

Каждый формат файла имеет контракт на то, что представляют двоичные биты. В случае исполняемого файла это намного сложнее, чем простой текстовый файл, но формат исполняемого файла также включает в себя части, которые хранят строки ASCII, как текстовый файл.

Если вы просматриваете файл с помощью шестнадцатеричного редактора, вы можете видеть как двоичное представление файла, так и текстовую интерпретацию ASCII двоичного файла рядом друг с другом. Обратите внимание, что двоичное представление отображает данные в более компактной форме: шестнадцатеричная. Последовательность из 4 двоичных разрядов представлена ​​одной шестнадцатеричной цифрой в диапазоне от 0 до F.

1 голос
/ 13 сентября 2009

Для двоичного представления данных (только единицы и нули) потребуется слишком много места на экране.

Hex или ascii эквиваленты более лаконичны, и наш мозг предпочитает это.

Мы должны рассматривать комбинированный шестнадцатеричный / ascii-дисплей (созданный, например, с помощью команды od) как попытку показать, как будут выглядеть данные: они должны быть шестнадцатеричными, и как они будут выглядеть. должен быть ТЕКСТ.

Но, как сказал Стивен С., ни один текстовый редактор не может точно определить, какими должны быть байты, поэтому он предоставляет только подсказку.

Пользователь может посмотреть на дисплей и решить, являются ли данные текстовыми или двоичными, или некоторая смесь из двух

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

1 голос
/ 13 сентября 2009

Есть ли способ "увидеть" двоичные данные в любой смысл в тексте редактор

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

Обычный способ справиться с этим в системе Unix / Linux - использовать утилиту командной строки «file». Это смотрит на начало файла и применяет эвристику, чтобы дать вам «лучшее предположение» на тип файла. Исходя из этого, вы видите, если вы можете найти подходящий инструмент для просмотра содержимого файла. Если у вас нет программы просмотра / редактирования / декомпиляции и т. Д., Которая понимает формат, утилита «od» может показать ее вам в различных формах; например в шестнадцатеричном, восьмеричном виде, как символы, и так далее.

РЕДАКТИРОВАТЬ: для уточнения "Двоичные данные могут означать абсолютно все":

  • Бинарная битовая комбинация, которая вывод (скажем) компилятором не может быть отличается от идентичного двоичная битовая комбинация выводится (скажем) какое-то случайное пользовательское приложение. Теоретически невозможно провести различие между случаями без неопровержимых внешних знаний о процессе, как я уже говорил выше.

  • Распознавание двоичных битовых комбинаций (например, как это делается программой «file») как правило, основанный на обнаружении "магических чисел" в первых нескольких байтах файла. Так, например, "магия" для исполняемого файла сценария - "#!" в первые два байта. Если вы пишете приложение, которое генерирует двоичный файл, который может иметь "#!" как его первый двух символов, это может привести к тому, что «file» даст ложные совпадения, и пометить ваши двоичные файлы как сценарии

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

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

1 голос
/ 13 сентября 2009

Я предлагаю использовать команду od в системе Unix. Это не текстовый редактор, но он по-прежнему хорош для анализа содержимого файлов. Если большинство символов пригодно для печати, вы можете использовать od -c file.

LE: Справочная страница GNU od (1)

0 голосов
/ 01 июля 2012

Вы можете просмотреть двоичный файл как изображение:

Визуализация двоичных файлов с кривыми заполнения пространства.

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