web-dev-qa-db-ja.com

ddを使用してファイルの正確な部分を抽出しますか?

588Koファイルがあり、0x7E8D6から0x8AD5Dまでのバイトを抽出したいと思います。私は試した :
dd if=file of=result bs=50311 count=1 skip=518358

  • 50311は0x8AD5D-0x7E8D6の略です
  • 518358は0x7E8D6の略です(切りたいところから)

ddは、指定されたオフセットにスキップできないことを教えてくれます。私に何ができる?それを行うための他のユーティリティはありますか?

1
Nark

skipcountは両方ともブロックで表されます。 518358×50311バイトをスキップするように求めています。

ddはエラーを検出できないようにする可能性があります なので、とにかく避けるのが最善です。

ほとんどのUnixバリアント(BusyBoxを含むがOpenSBDは含まない)では、headおよびtailにバイト数を渡すことができます。 tailは1から数えることを覚えておいてください。

<file tail -c "$((0x7E8D6 + 1))" | head -c "$((0x8AD5D - 0x7E8D6))" >result

ddを使用してファイルの正確な部分を抽出しますか?

構文を少し調整しましょう。

bs = 1

単一のブロックまたはバイトにしたいカウントまたはスキップがあるため、ブロックサイズを1に設定します。

スキップ= 518358

ストリームの開始時に、この数のブロックまたはバイトをスキップします。

カウント= 50311

この数のブロックまたはバイトをストリームからコピーします。

dd if=/path/file of=/path/result bs= count=50311 skip=518358

1
jc__