Как интерпретировать восьмеричный или шестнадцатеричный дамп двоичного файла?

14

В двоичном файле есть строки и несколько чисел. Если я делаю od -c filenameили strings filename, я могу видеть строки правильно. Но как насчет чисел? Они в каком-то странном формате.

Текст после выполнения od -c filenameвыглядит так:

0000000 036 \ 0 032 004 SD \ 0 \ 0 \ 0 \ 0 сек 1
0000020 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ t \ 0 - 002 3 001
0000040 & \ 0 032 \ f O 2 006 \ 0 \ 0 \ 0 osfus 1
0000060 - 002 3 001 r \ r \ 0 \ 0 \ t \ 0 \ 0 @ 3 ×
0000100 233 º 004 \ 0 é 003 \ 0 \ 0 & \ 0 032 \ f O 2 7 \ 0
0000120 \ 0 \ 0 osfeu 1 - 002 3 001 - 235
0000140 \ 0 \ 0 035 003 \ 0 @ 3 × 233 º 004 \ 0 С \ a \ 0 \ 0
0000160 ä \ 0 032 \ f O r E \ 0 \ 0 \ 0 osfap 1

Как это расшифровать?

Я даже пытался hexdump -C filename

Вывод выглядит так:

00000000 1e 00 1a 04 53 44 00 00 00 00 73 65 71 31 20 20 | .... SD .... seq1 |
00000010 20 20 00 00 00 00 00 00 00 00 09 00 f3 02 33 01 | .......... О.3. |
00000020 26 00 1a 0c 4f 32 06 00 00 00 6f 73 66 75 73 31 | & ... O2 .... osfus1 |
00000030 20 20 f3 02 33 01 ff 0d 00 00 09 00 00 40 33 d7 | ó.3.ÿ ...... @ 3 × |
00000040 9b ba 04 00 e9 03 00 00 26 00 1a 0c 4f 32 37 00 | .º..é ... & ... O27. |
00000050 00 00 6f 73 66 65 75 31 20 20 f3 02 33 01 e9 9d | ..osfeu1 ó.3.é. |
00000060 00 00 1d 03 00 40 33 d7 9b ba 04 00 d1 07 00 00 | ..... @ 3 × .º..С ... |
00000070 e4 00 1a 0c 4f 72 45 00 00 00 6f 73 66 61 70 31 | ä ... OrE ... osfap1 |

Чтобы уточнить, основной файл, который является обычным файлом, имел один атрибут, который отображал, в каком-то странном формате, поэтому мы смотрим на необработанный / двоичный файл.

Выполнение восьмеричного дампа на обычном файле решило проблему с просмотром.

С помощью grep 'id=123' regular_file | head -1 | od -cя смог увидеть, какой номер был там. Я ожидал 1, он показал нам как 001.

Жиль "ТАК - перестань быть злым"
источник
4
Чтобы «интерпретировать» его, вам нужно знать, в каком формате он хранится.
Кевин
Мне сказали, что числа в двоичном формате, в частности, двоичные целые числа. Это помогает моему вопросу?
Нет, все на компьютере является двоичным, вам нужно знать расположение файла - где находится каждое число, что означает каждое число. Где вы взяли этот файл?
Кевин
просто чтобы уточнить, у меня также есть нормальный файл. [seq = 132253932] [Major = S] [Minor = D] [src = seq1] [Id = 0] [ref = 0] [Date = 20120307] Один из тегов в обычном файле имеет значение в ascii, Обычный файл обычно используется для чтения журналов, но чтобы убедиться, что он имел правильное значение, но в другом формате мы смотрим на этот двоичный файл.
Правая сторона «стандартного» шестнадцатеричного дампа обычно представляет собой ASCII-представление этих данных. Если вы видите этот текст: not textв этом представлении ASCII это не означает, что это ASCII для программы, которая читает файл. например. Номер 7957706749327538292 при кодировании в виде 64-разрядного целого числа без знака с прямым порядком байтов. выглядит в представлении ASCII: not text.
Peter.O

Ответы:

4

Есть много способов хранения чисел - ASCII (который может иметь определенные для локали варианты, такие как использование ',' для разделения дробной части ИЛИ как тысячи групп), двоичное целое число (переменное число бит) / float / double (все которая может варьироваться в зависимости от архитектуры с прямым порядком байтов и от того, формализует ли программное обеспечение, производящее файл, представление), BCD (несжатый, упакованный, с фиксированной запятой и другие варианты), двоично-двоичное кодированное десятичное число ...

Там нет стандарта.

symcbean
источник
19

Одной из первых вещей, которые мне пришлось запоминать для информатики, была Data + Interpretation = Полезная информация . Следствием этого является то, что если вам не хватает данных или интерпретации, у вас ничего нет. Сами данные не могут сказать вам, как их интерпретировать. (у вас могут быть метаданные, которые сообщают вам об этом, но тогда вам также нужно знать, как интерпретировать метаданные )

В этих обстоятельствах я предлагаю попробовать это:

file filename

Если это приходит с чем-то вроде:

filename: data

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

Восьмеричный вывод дампа

od(восьмеричный дамп) создает гибридный текстово-восьмеричный дамп. Non-номер либо печатные символы , такие как o, s, f, и т.д., или непечатаемые символы , такие как \0(ASCII 0, NUL), или \a(ASCII 7 BEL), или числа в базе 8, со стандартным префиксом C 0(например , 032= 26 в десятичная дробь). Ваш файл интерпретируется как поток 8-битных байтов .

Вывод шестнадцатеричного дампа

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

Целые

Если ваш файл содержит 100% двоичных целых чисел (т. Е. Представляет собой однородный одномерный массив без заголовков какого-либо целочисленного представления), то вы должны ответить себе на все эти вопросы:

  • Являются ли они «правильными» двоичными или двоично-десятичными (BCD) ? (возможно бинарный)
  • Насколько они широки?
  • Если их ширина не кратна 8, они упакованы битами, как SMS-сообщения или Base64, или выровнены по байту?
  • Если их ширина составляет 8 бит или более, каков порядок байтов ? Это Big Endian, Little Endian или один из других, более редких сортов?
  • Целые числа подписаны или не подписаны ?
  • Если они подписаны, представлены ли они в дополнении двух (более вероятно), или в дополнении , или что-то редкое и странное?

Наверное, сейчас я забуду еще кое-что.

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

Алексиос
источник