Як інтерпретувати восьмеричний чи шістнадцятковий дамп двійкового файлу?


14

Двійковий файл має рядки і деякі цифри, якщо я od -c filenameабо strings filenameя можу бачити рядки правильно. Але, як щодо цифр? Вони в якомусь дивному форматі.

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

0000000 036 \ 0 032 004 SD \ 0 \ 0 \ 0 \ 0 seq 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 \ 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 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] [Дата = 20120307] Один з тегів у звичайному файлі має значення в ASCII, звичайний файл зазвичай використовується для читання журналів, але щоб переконатися, що він мав правильне значення, але в іншому форматі ми дивимось на цей двійковий файл.

Права частина "стандартного" шестигранного дампа - це типово представництво ASCII цих даних. Якщо ви бачите цей текст: not textу цьому представленні ASCII це не означає, що це ASCII для програми, яка читає файл. напр. Число 7957706749327538292 при кодуванні як 64-бітне ціле число, яке не має підписаного ендіану. виглядає в поданні ASCII: not text.
Пітер.О

Відповіді:


4

Існує безліч способів зберігання чисел - ASCII (які можуть мати конкретні локальні варіанти, такі як використання "," для розділення дробової частини АБО у вигляді тисяч груп), двійкове ціле число (змінна кількість біт) / float / double (всі яка може змінюватися залежно від архітектури ендіану та того, чи програмне забезпечення, що створює файл, формалізує подання), BCD (нестиснений, упакований, фіксований і інші варіанти), двоцинкові кодовані десяткові ...

Немає стандарту.


19

Однією з перших речей, які мені довелося запам’ятати інформатиці, було дані + інтерпретація = корисна інформація . Наслідком цього є те, що якщо вам не вистачає даних або інтерпретації, у вас нічого немає. Самі дані не можуть сказати, як їх інтерпретувати. (ви можете мати метадані, які вам це говорять, але тоді вам потрібно знати, як інтерпретувати метадані )

За обставин я пропоную спробувати це:

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 біт або більше, який порядок байт ? Це Біг-Ендіан, Маленький Ендіанець, чи хтось із інших, рідші види?
  • Чи цілі числа підписані, чи непідписані ?
  • Якщо вони підписані, чи вони представлені у додатку двох (скоріше), чи доповненнях чи щось рідкісне та дивне?

Напевно, є більше, про що я зараз забуваю.

І це лише для одновимірного рівномірного масиву цілих чисел, що походить від загальної, сучасної архітектури комп’ютера. Якщо ваші дані мають будь-яку складність, речі стають такими волохатими, що виграти в лотерею швидко стане простіше, ніж просто вгадати формат. І вам доведеться здогадуватися (здогадана здогадка, але здогадка), якщо ви не знаєте формату.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.