588Koファイルがあり、0x7E8D6から0x8AD5Dまでバイトを抽出したいと思います。私は試した:dd if=file of=result bs=50311 count=1 skip=518358
- 50311は0x8AD5D - 0x7E8D6を示します。
- 518358は0x7E8D6を表します(切り取りたい場所から)
dd は指定されたオフセットに移動できないことを通知します。どうですか?これを行うことができる他のユーティリティはありますか?
答え1
ddを使用してファイルの正確な部分を抽出しますか?
構文を少し調整してみましょう。
bs=1
個々のブロックまたはバイトで計算またはスキップしたいので、ブロックサイズを1に設定します。
skip=518358
ストリームの先頭からこれだけのブロックまたはバイトをスキップします。
count=50311
ストリームから多すぎるブロックまたはバイトをコピーします。
dd if=/path/file of=/path/result bs=1 count=50311 skip=518358
答え2
skip
そしてcount
ブロックで表現されます。 518358×50311バイトをスキップするように要求しました。
dd
エラーが検出されるのを防ぎます。だから、とにかく避けるのが最善です。
head
ほとんどのUnixバリアント(BusyBoxは含まれていますがOpenSBDは除く)の場合と複数のバイトを渡すことができますtail
。tail
1から世紀を始めることを忘れないでください。
<file tail -c "$((0x7E8D6 + 1))" | head -c "$((0x8AD5D - 0x7E8D6))" >result