ディスクから生データを読み取って変換する

ディスクから生データを読み取って変換する

以下のようにデータを変換する方法を見つけるのに役立ちます。 ddユーティリティを使用してディスクから読み込みます。

dd if=/dev/sdb Skip=8388608 count=560 iflag=skip_bytes,count_bytes |hexdump -C

私はますます

000001a0 00 00 00 00 cf 4c 79 ce 00 00 00 00 00 00 00 00 |.....リー..........|

しかし、私は以下を得たいと思います:

000001a0 ce794ccf00000000 0000000000000000 |.....リー..........|

私はhexdumpを使用する必要はなく、他のツールがトリックを実行します。ありがとうございます。

答え1

16進バイトの逆順は、個々のバイトのリトルエンディアン処理によるものです。

hexdumpは64ビット値を受け入れないようですが、od(8進ダンプ)は受け入れます。 hexdumpの呼び出しを次のように置き換えます。

od -t x8z

64ビット16進長語とASCIIを出力します。 ASCIIは>...<で囲まれているので、簡単にスキップできます。

答え2

hexdump最初は構文が少しあいまいに見えますが、 の出力は完全にカスタマイズできます。

$ seq 10 | hexdump -C
00000000  31 0a 32 0a 33 0a 34 0a  35 0a 36 0a 37 0a 38 0a  |1.2.3.4.5.6.7.8.|
00000010  39 0a 31 30 0a                                    |9.10.|
00000015
$ seq 10 | hexdump -e '"%08.8_ax " 2/8 " %016x"' -e '"  |" 16 "%_p" "|\n"' -e '"%08.8_Ax\n"'
00000000  0a340a330a320a31 0a380a370a360a35  |1.2.3.4.5.6.7.8.|
00000010  0000000a30310a39                   |9.10.|
00000015

これらの64ビット整数のエンディアン(上記のリトルエンディアン)は、システムのコンピュータアーキテクチャ/ Cコンパイラによって異なります。

上記の最後の数字で欠落しているバイトを満たすためにゼロパディングを確認してください。

hexdumpのとを使う代わりに、ddhexdumpのとskipを使うことができます。count-s-n

関連情報