У меня есть виртуальная машина VMWare Windows 10, и я загрузился в Live Linux Mint.

Я просто хочу написать первые n байтов двоичного файла в определенный сектор на жестком диске, используя dd в Linux. Для этого я добавил виртуальный жесткий диск объемом 500 МБ в Windows и отформатировал его как NTFS.

Я использую команду

sudo  dd of=/dev/sdb if=/media/mint/<mount>/Temp/mbr.img bs=11 seek=1000 count=1

Здесь /dev /sdb - жесткий диск на 500 МБ (не раздел на нем)

/media/mint/(mount)/Temp/mbr.img - это двоичный файл. Я просто сбросил MBR, например.

bs = 11 надеюсь это для 11 байтов

seek = 1000 Я надеюсь, что это будет 1000-й сектор (по умолчанию 512 байт на сектор)

Команда успешно завершена.

Однако, когда из Windows 10 Hex Workshop я проверяю содержимое сектора 999,1000 и 1001 (я не очень уверен, к чему относится поиск = 1000), они остаются пустыми. На нем ничего не написано с mbr.img.

Когда я ищу примеры данных первых 11 байт на жестком диске, я нигде не нахожу их.

В Hex Workshop я придерживаюсь десятичных чисел для перехода в сектор.

Может ли кто-нибудь помочь мне в дальнейшем выяснить, в чем здесь ошибка / проблема?

2 ответа2

2

От man 1 dd:

bs=BYTES
читать и писать BYTES в то время (также см ibs= obs=

ibs=BYTES
прочитанных BYTES байт в то время ( по умолчанию: 512

obs=BYTES
написать BYTES байт в то время ( по умолчанию: 512

seek=BLOCKS пропуска BLOCKS obs -sized блоков при запуске выхода

Используя bs=11 вы влияете на ibs и obs . seek=1000 использует obs . Вы ожидаете пропустить 1000 секторов вывода, но вместо этого пропустите 1000 порций вывода по 11 байт каждый.

Похоже, вы хотели что-то вроде

sudo dd if=/path/to/mbr.img ibs=11 count=1 of=/dev/sdb obs=512 seek=1000 
0

Если вы установите размер блока bs 11, а затем выполните поиск 1000 блоков, вы пропустили 1000 * 11 = 11000 байт вместо 1000 * 512 = 512000 байт для 1000 секторов. Итак, очевидно, что это не может сработать, и теперь вы изменили какую-то другую часть вашего жесткого диска, которая может снова вас укусить (так что подумайте о том, как отменить это изменение).

Я знаю, что вы можете использовать dd для записи файлов с точностью до байта, поэтому для файла вы можете сделать что-то вроде

dd ... bs=1 count=11 seek=512000

Однако я не уверен, что вы можете написать часть блока в /dev/sdb . Если вы не можете, один из способов - скопировать этот конкретный блок

dd if=/dev/sdb of=/tmp/myblock bs=512 skip=1000 count=1

затем либо отредактируйте файл /tmp/myblock , либо используйте dd для внесения изменений в байтовую точность, как описано выше (но без seek , конечно, потому что файл состоит только из блока, который вы хотите изменить), и, наконец, запишите блок вернуться с

dd of=/dev/sdb if=/tmp/myblock bs=512 seek=1000 count=1

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .