Это jhn c ответ с небольшими улучшениями (объяснено в конце этого ответа). Если jhn c решит превратить свой комментарий в ответ, пожалуйста, замените его / вместо этого.
#! /bin/bash
overwrite() {
file="$1"; from="$2"; to="$3"; with="$4"
yes '' | tr \\n "\\$(printf %o "$with")" |
dd conv=notrunc bs=1 seek="$((from))" count="$((to-from))" of="$file"
}
В вашем случае вы бы использовали вышеуказанную функцию, например
overwrite yourFile 0x3000 0xDC000 0xFF
Начальный и конечный байты начинаются с 0. Начало включительно, а конец - эксклюзив. Пример:
$ printf 00000 > file
$ overwrite file 1 3 0x57
$ hexdump -C file
00000000 30 57 57 30 30 |0WW00|
00000005
Внесены улучшения:
Исправлено неправильно count=...
и объяснена интерпретация начала и конца.
Разрешить заполнение нулевыми байтами.
Если вы хотите записать нулевые байты 0x00
, вы не можете использовать yes $'\x00'
. Нулевой байт будет представлять конец строки аргумента yes
, что делает вызов эквивалентным yes ''
. Так как yes '' | tr -d \\n
не выводит, dd
будет ждать бесконечно.
Команда, представленная в этом ответе, позволяет заполнить область любым байтом (выберите один из 0x00 до 0xFF).