hexdump と xxd 形式の違い

hexdump と xxd 形式の違い

逆 16 進ダンプを実行する方法を検索していたところ、xxd について言及されているのを見つけました。ただし、単純には機能しないようです:

xxd -r hexdumpfile > binaryfile

xxd infile次に、との出力の違いを比較したところhexdump infile、次の 3 つの違いが見つかりました。

  1. xxd出力にはアドレスの後にコロンが付きます
  2. xxd出力ではデータの位置が逆になります(例えば、5a42hexdump出力では425axxd出力になります)
  3. 各行の後に余分な文字があります

サーバー上には特定のファイルの 16 進ダンプ バージョンしかありません。xxd を使用してバイナリ データを正しく取得するにはどうすればよいでしょうか?

答え1

私の知る限り、変換を実行する単一のコマンドはありませんが、いくつかのステップに簡単に分割できます。

  1. hexdump出力からアドレスを削除するには、sed
  2. バイナリに変換するにはxxd
  3. エンディアン変換(例えば、5a42は になる425add

完全なコマンドは次のとおりです。

sed 's/^[0-9]*//' hexdump | xxd -r -p | dd conv=swab of=binaryfile

答え2

この回答は、https://stackoverflow.com/a/52834021/6770384

変換は 1 つのコマンドで実行できます。アドレスの後に を追加し、エンディアン (に切り替える)を変更するだけsedで十分です。:ab1212ab

sed -E 's/ /: /;s/ (..)(..)/ \2\1/g;$d' dump | xxd -r

既知のバグ(コメント欄参照)

  • 元のファイルの長さが奇数の場合 (例: 1、3、5、7、... バイト長)、末尾に null バイトが追加されます。
  • 元のファイルの繰り返しセクションは、hexdumpを使用して編集され た場合、正しく復元されません*

答え3

を追加してみてください-p

xxd -r -p hexdumpfile > binaryfile

答え4

以下のものを簡単に使用できます

  1. 必要な形式で 16 進ダンプを取得する

    hexdump -Cv <バイナリファイル.bin> > バイナリファイル.txt

-Cはデータをバイトごとに印刷します

-v は繰り返しコンテンツに * を使用しません

  1. ここで、binary_file.txt の各行の最初と最後の数文字を削除する必要があります。ここでは sed コマンドを使用できます。

  2. xxdコマンドを使用する

    xxd -r -p バイナリファイル.txt > バイナリファイル.bin を回復する

  3. 両方のファイルのmd5sumをチェックすることができます。一致するはずです

    md5sum バイナリファイル.bin

    md5sum 回復バイナリファイル.bin

関連情報