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

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

バイナリファイルには文字列といくつかの数値があります。これにより、 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 3001 ÿ \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 035003 \0 @ 3 × 233º 004 \0 Ñ \a \0 \0
0000160 ä \0 032 \f または 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 |ä...またはE...osfap1|

明確にするために、通常のファイルである基本ファイルには奇妙な形式の表示された属性があるため、生/バイナリファイルを見ています。

一般ファイルの8進数ダンプを実行して表示の問題を解決しました。

それでgrep 'id=123' regular_file | head -1 | od -cそこにどんな数字があるのか​​わかります。もともとは一人だと思いましたが001が出ましたね。

答え1

コンピュータサイエンスに関して私が最初に覚えておくべきことの1つデータ+説明=有用な情報。データや説明が不足すると何もないという結論が出てきます。データ自体はこれを解釈する方法を教えてくれません。 (これを伝えるメタデータがあるかもしれませんが、それを解釈する方法を知る必要があります。メタデータまた)

この場合は、次のことを試してみることをお勧めします。

file filename

これが発生した場合:

filename: data

あなたは完全に形式が何であるか、どのプログラムから来たのか、目的が何であるか、内容が何であるかを知らずにfilename放棄する必要があります。

8進ダンプ出力

od(8進ダンプ)混合テキストと8進ダンプを生成します。数値以外の文字は、などの印刷可能文字、またはosASCII 0、)または(ASCII 7、)fなどの印刷できない文字または標準Cプレフィックスを持つデフォルトの8桁(例:10進数= 26)です。ファイルがストリームとして解釈されます。\0NUL\aBEL00328ビットバイト

16進ダンプ出力

hexdump16進数で8ビットバイトをリストする1つの列と、そのバイトが対応するASCII文字(存在する場合)を示す別の列(バイト値が印刷できないASCII文字またはASCII以外)を使用して既存の16進数ダンプを生成します。文字)、.その場所に表示されます)。繰り返しますが、ファイルはストリームとして解釈されます。8ビットバイト

整数

ファイルに 100% バイナリ整数 (たとえば、一部の整数表現のヘッドレス、一様、一次元配列) が含まれている場合は、次の質問にすべて答える必要があります。

  • 「正しい」バイナリですか、それともバイナリコード10進数(BCD)? (おそらくバイナリ)
  • 幅はいくらですか?
  • 幅が8の倍数ではない場合、SMSメッセージやBase64のようにビットパックされていますか、またはバイトソートされていますか?
  • 8ビット以上の場合、幅はいくらですか?バイト順?ビッグエンディアン、リトルエンディアン、または他の珍しいタイプのいずれか?
  • 整数です署名済みまたは署名されていない
  • 彼らが署名した場合、彼らは代表したのですか?2の報酬(可能性が高い)または人の補完、それとも希少で奇妙なのでしょうか?

今はもっと忘れているかもしれません。

これは、一般的な最新のコンピュータアーキテクチャの一次元均一整数配列でのみ機能します。データが複雑になると、状況が厳しくなり、形式を推測するよりも宝くじに当選する方が簡単になります。あなたは持つ形式がわからない場合は推測(教育を受けた推測ですが、推測に過ぎない)です。

答え2

数字を保存する方法はいくつかあります。 ASCII(小数部を区切ったり、千単位のグループとして「、」を使用するなど、ロケール固有の変形がある可能性があります)、バイナリ整数(可変桁数)/浮動小数点/ダブル(これらすべてはエンディアンアーキテクチャとファイルを生成するソフトウェア表現がフォーマットされているかどうか、BCD(非圧縮、パック、固定小数点、およびその他のバリアント)、二重キニマルコード10進数などによって異なります。

標準はありません。

関連情報