Как автоматически отредактировать файл (который требует Hex-редактора) в человечности

У меня есть загрузочный образ андроида, который должен быть исправлен каждый раз, я высвечиваю ядро. Исправление включает добавляющие 4 096 байтов в загрузочный образ с помощью Hex-редактора (я использовал ghex), который является очень утомительным процессом, потому что необходимо вручную добавить 4 096 чисел к файлу вручную. Так, я хочу сделать сценарий для автоматизации процесса.

Это не похоже на просто файлы редактирования, это требует Hex-редактора.

Чтобы быть конкретным, я хочу добавить 0x30, 0x83, 0x19, 0x89, 0x64 сопровождаемый 0x00

0
задан 16 March 2019 в 07:37

2 ответа

Это - вид вещи, с которой необходимо смочь сделать dd

Отказ от ответственности: помните это dd известен нежно как дисковый разрушитель: удостоверьтесь, что у Вас есть соответствующие резервные копии исходных файлов прежде, чем попробовать это.

Например, давайте сначала создадим минимальный тестовый файл:

$ printf 'hello' > testfile
$ xxd testfile
00000000: 6865 6c6c 6f                             hello

Это - всего 5 байтов, конечно - в действительности это будет Ваш файл изображения.

Теперь мы хотим записать, что еще несколько байтов, 0x30, 0x83, 0x19, 0x89, 0x64, дополненный пустыми байтами 0x00 до размера блока (говорят), что 128 байтов, и добавляют его в файл. Это только для иллюстрации - Вы будете на самом деле использовать ibs=4096 в Вашем случае.

$ printf '\x30\x83\x19\x89\x64' | dd of=testfile ibs=128 conv=sync,notrunc oflag=append
0+1 records in
0+1 records out
128 bytes copied, 0.000500623 s, 256 kB/s

Давайте проверим результат:

$ xxd testfile
00000000: 6865 6c6c 6f30 8319 8964 0000 0000 0000  hello0...d......
00000010: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000020: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000030: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000040: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000050: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000060: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000070: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00000080: 0000 0000 00                             .....

который составляет 5 байтов оригинала testfile, сопровождаемый новой последовательностью байта, дополненной к 128-байтовому размеру блока, для в общей сложности 133 байтов (шестнадцатеричное смещение 00000085).

2
ответ дан 26 October 2019 в 01:02

Оба head и tail может через их --bytes опция, сделайте хирургию на своем файле.

# assume: boot.img is the to-be-modified file, my4096 is your 4096 bytes,
# and you want to replace bytes 4097-8192 of the file. newboot.img is the result.
( \
  head --bytes=4096 boot.img ;\
  cat my4096;\
  tail --bytes=+8193 boot.img \
) >newboot.img

или, Вы могли использовать ed, или sed, или...

0
ответ дан 26 October 2019 в 01:02

Другие вопросы по тегам:

Похожие вопросы: