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

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

我有一个 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

skipcount都以块表示。您要求跳过 518358 × 50311 字节。

dd可以让错误不被发现,所以无论如何最好避免它。

对于大多数 Unix 变体(包括 BusyBox 但不包括 OpenSBD),您可以将多个字节传递给headtail。只要记住tail从 1 开始数就可以了。

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

相关内容