我有一个 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
可以让错误不被发现,所以无论如何最好避免它。
对于大多数 Unix 变体(包括 BusyBox 但不包括 OpenSBD),您可以将多个字节传递给head
和tail
。只要记住tail
从 1 开始数就可以了。
<file tail -c "$((0x7E8D6 + 1))" | head -c "$((0x8AD5D - 0x7E8D6))" >result