逆16進ダンプを行う方法を探していたところ、xxdが言及されていました。ただし、単純に機能するようには見えません。
xxd -r hexdumpfile > binaryfile
次に、xxd infile
とhexdump infile
の出力の違いを比較したところ、次の3つの違いが見つかりました。
5a42
は、xxd出力の425a
になります)。サーバー上にある特定のファイルのhexdumpedバージョンしかありません。 xxdを使用してバイナリデータを正しく取得するにはどうすればよいですか?
変換を実行することを私が知っているコマンドは1つもありませんが、いくつかのステップに簡単に分割できます。
hexdump
を使用してsed
出力からアドレスを削除しますxxd
を使用してバイナリに変換しますdd
を使用したエンディアン変換(たとえば、5a42
は425a
になります)完全なコマンドは次のとおりです。
sed 's/^[0-9]*//' hexdump | xxd -r -p | dd conv=swab of=binaryfile
この回答は https://stackoverflow.com/a/52834021/6770384 からのクロスポストです
1つのsed
コマンドで変換を実行できます。アドレスの後に:
を追加し、エンディアンを変更するだけで十分です(ab12
を12ab
に切り替えます)。
sed -E 's/ /: /;s/ (..)(..)/ \2\1/g;$d' dump | xxd -r
既知のバグ(コメントセクションを参照)
*
を使用してhexdump
された場合、正しく復元されません。