Files

使用 dd 提取文件的精確部分?

  • September 21, 2021

我有一個 588Ko 文件,我想提取從 0x7E8D6 到 0x8AD5D 的字節。我試過 :
dd if=file of=result bs=50311 count=1 skip=518358

  • 50311 代表 0x8AD5D - 0x7E8D6
  • 518358 代表 0x7E8D6 (從我要剪切的地方)

dd 告訴我它不能跳到指定的偏移量。我能做些什麼?有沒有其他實用程序可以做到這一點?

skip並且count都以塊表示。您要求跳過 518358 × 50311 字節。

dd可以讓錯誤未被發現,所以無論如何最好避免。

對於大多數 Unix 變體(包括 BusyBox 但不包括 OpenSBD),您可以將多個字節傳遞給headtail。請記住tail從 1 開始計數。

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

使用 dd 提取文件的精確部分?

讓我們稍微調整一下語法。

bs=1

將塊大小設置為 1,因為您希望在單個塊或字節中進行任何計數或跳過。

skip=518358

在流的開頭跳過這麼多塊或字節。

count=50311

從流中複製這麼多塊或字節。

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

引用自:https://unix.stackexchange.com/questions/450489