web-dev-qa-db-ja.com

hexdumpとxxd形式の違い

逆16進ダンプを行う方法を探していたところ、xxdが言及されていました。ただし、単純に機能するようには見えません。

xxd -r hexdumpfile > binaryfile

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

  1. xxd出力では、アドレスの後にコロンが付きます
  2. xxd出力では、データの位置が逆になります(たとえば、hexdump出力の5a42は、xxd出力の425aになります)。
  3. 各行の後にいくつかの余分な文字があります

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

8
tanon

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

  1. hexdumpを使用してsed出力からアドレスを削除します
  2. xxdを使用してバイナリに変換します
  3. ddを使用したエンディアン変換(たとえば、5a42425aになります)

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

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

この回答は https://stackoverflow.com/a/52834021/6770384 からのクロスポストです

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

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

既知のバグ(コメントセクションを参照)

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