バイナリファイルの8進数または16進数のダンプを解釈する方法は?


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 2006 \ 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 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 |

明確にするために、通常のファイルであるメインファイルには、奇妙な形式で表示されていた属性が1つあったため、rawファイルまたはバイナリファイルを見ています。

通常のファイルで8進ダンプを行うことで、表示の問題を解決しました。

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]通常ファイルのタグの1つはasciiの値を持ち、通常、通常のファイルはログの読み取りに使用されますが、確認のために正しい値が設定されていますが、異なる形式でこのバイナリファイルを確認しています。

「標準」16進ダンプの右側は、通常、そのデータのASCII表現です。このテキストが表示される場合:not textそのASCIIビューでは、ファイルを読み取るプログラムにとってASCIIであることを意味しません。例えば。64ビットのリトルエンディアンの符号なし整数としてエンコードされた場合の番号7957706749327538292。ASCIIビューでは次のようになりますnot text
Peter.O

回答:


4

数字を保存する方法はたくさんあります-ASCII(「、」を使用して小数部を区切ったり、千単位のグループ化など、ロケール固有のバリアントを持つことができます)、バイナリ整数(可変ビット数)/ float / double(すべてのエンディアンアーキテクチャと、ファイルを生成するソフトウェアが表現を形式化するかどうか、BCD(非圧縮、パック、固定小数点、およびその他のバリアント)、バイキナリコード10進数によって異なる場合があります...

標準はありません。


19

コンピューターサイエンスのために最初に覚えなければならなかったものの1つは、データ+解釈=有用な情報です。この結果として、データまたは解釈が欠落している場合、何もありません。データ自体は、その解釈方法を教えてくれません。(これを伝えるメタデータを持つことができますが、メタデータの解釈方法も知る必要があります)

状況下では、これを試すことをお勧めします:

file filename

次のようなものが出てきたら:

filename: data

そして、あなたが持っていない、絶対にフォーマットが何であるかは考えて、それは、から何プログラムの使用が何であるか、または内容については何もfilename、あなたはおそらくあきらめなければなりません。

オクタルダンプ出力

od(8進ダンプ)は、テキストと8進のハイブリッドダンプを生成します。非数値は、次のようないずれかの印刷可能な文字であるosf、などなど、または非印刷可能文字\0(ASCII 0 NUL)、または\a(ASCII 7、BEL標準Cプレフィックスとベース8)、または数字、0(例えば032= 26で10進数)。ファイルは8ビットバイトのストリームとして解釈されます

六角ダンプ出力

hexdump従来の16進ダンプを生成し、1列に8ビットバイトを16進数でリストし、もう1列にこれらのバイトが対応するASCII文字があるかどうかを示します(バイト値が印刷不能なASCII文字であるか、ASCII文字ではない場合) 、.その位置に表示されます)。繰り返しますが、ファイルは8ビットバイトのストリームとして解釈されます

整数

ファイルが100%のバイナリ整数で構成されている場合(つまり、ある種の整数表現のヘッダーのない均一な1次元配列)、これらすべての質問に答える必要があります。

  • それらは「適切な」バイナリ、またはバイナリコード10進数(BCD)ですか?(おそらくバイナリ)
  • ビット幅はどれくらいですか?
  • 幅が8の倍数でない場合、SMSメッセージやBase64のようにビットパックされているか、バイトアラインされていますか?
  • 幅が8ビット以上の場合、バイト順は?ビッグエンディアン、リトルエンディアン、または他の珍しい種類の1つですか?
  • 整数は符号付きですか、符号なしですか?
  • 署名されている場合、それらは2の補数(より可能性が高い)、1の補数、またはまれで奇妙なもので表されますか?

おそらく私が今忘れていることはもっとあります。

そして、これは整数の単一次元の均一な配列のためのものであり、一般的な最新のコンピューターアーキテクチャから来ています。データに何らかの複雑さがある場合、物事は非常に毛深いものになり、フォーマットを推測するよりも宝くじに勝つことがすぐに容易になります。そして、形式を知らない限り、推測する必要があります(経験に基づいた推測ですが、推測です)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.