Я пытаюсь получить конкретные данные с диска, начиная с определенного адреса (не знаю, физический ли это адрес или нет, например: 0x00000000DA88FFFF, с размером 0x5776). На самом деле я новичок в работе с имиджером дисков и другими вещами, и я обнаружил, что команда dd подходит для создания образов дисков, но я не смог найти ничего, связанного с началом создания образа с определенных адресов с определенным размером. есть ли вообще это сделать? Я хочу извлечь конкретную информацию с диска.
dd имеет параметр skip
, позволяющий пропустить часть в начале ввода.
Дело в том, что dd читает блок за раз, считывает блок в память, затем записывает этот блок на выход, а затем повторяет. Если количество пропускаемых байтов не кратно размеру блока по умолчанию (512), вам необходимо установить размер блока. Следующее будет работать:
dd if=/dev/sda1 bs=1 skip=3666411519 count=22390 of=/some/file
В этом случае вы устанавливаете размер блока в один байт (потому что ваше значение пропуска произвольно, а не кратно чему-либо конкретному).
Использование блока размером 1 байт будет относительно медленным, но если вы читаете только около 22 КБ, это не большая проблема.
dd
имеет флаг skip
:
skip=N skip N ibs-sized blocks at start of input
Но тогда адрес должен быть N * ibs. Но 0x00000000DA88FFFF = 3 × 1222137173, что не кажется разумной отправной точкой. В общем, вы можете сделать:
dd ibs=X start=Y count=Z if=/some/disk
Для копирования Z*X
байтов, начиная с Y*X
.