Назад | Перейти на главную страницу

Как рассчитать начальный адрес раздела из MBR

Учитывая MBR и структуру таблицы MBR / разделов, как можно рассчитать размер и начальный адрес каждого раздела?

Для пояснения скажем, мне дали это -

Ответ: В MBR показаны три записи таблицы разделов.

Раздел 1: начальный адрес LBA: сектор 63 (десятичный). При использовании шестнадцатеричного представления начальный адрес - 0000003f. Размер: 20482812 секторов (десятичный). При использовании шестнадцатеричного представления размер равен 01388afc.

Раздел 2: Начальный адрес LBA: сектор 20482875 (десятичный). При использовании шестнадцатеричного представления начальный адрес - 01388b3b. Размер: 20482875 секторов (десятичный). При использовании шестнадцатеричного представления размер равен 01388b3b.

Раздел 3: Начальный адрес LBA: Сектор 40965750 (десятичный). При использовании шестнадцатеричного представления начальный адрес - 02711676. Размер: 37142280 секторов (десятичный). При использовании шестнадцатеричного представления размер равен 0236bf08.

Как вы пришли к такому ответу?

Разделы начинаются с 1be (000001BE)

Чтобы выяснить, где находится 1be, сначала перейдите к смещению (смещение - это первый столбец) 0001b0. Теперь на 0001b0: считайте в шестнадцатеричном формате, чтобы найти E. Например, если мы посмотрим на первый набор чисел после 0001b0: 0000, мы посчитаем первые две цифры (00) как 0, а затем вторые две как 1 ... продолжайте считать, пока не дойдете до E что на 8001 (80 - «E»). Это начало таблицы разделов - всегда 16 байтов, поэтому она заканчивается на 3801 (или предпоследнем наборе чисел в строке смещения 0001c0).

Адрес LBA всегда начинается с 8 и заканчивается на 11. Итак, если мы посмотрим на наш первый раздел (8001–3801) и посчитаем до 8, мы получим 3f00 (3f - «8»), а конец - 0000 (последние два 00 - это «11»). Таким образом, весь адрес LBA - 3f00 0000, НО мы должны изменить порядок, потому что он имеет формат с прямым порядком байтов и нам нужен шестнадцатеричный формат. Для этого разбейте число на 3f 00 00 00
00 00 00 3f <- «перевернутый»

Повторите процесс от до остальной информации о разделе - остановитесь, если найдете все 0. Примечание: у вас не может быть более 4 (основных) разделов.

Я считаю, что наибольшие проблемы с пониманием шестнадцатеричного представления таблицы разделов связаны с проблема порядка байтов. ПК Intel основаны на архитектуре с прямым порядком байтов с обратным порядком байтов для представления многобайтовых чисел. Таким образом, номер смещения сектора LBA, например 01388b3b хранится как 3b8b 3801 - который находится прямо в вашей таблице разделов / MBR, начиная с 0x01dd. Тот факт, что число повторяется сразу после этого, просто совпадение - длина раздела просто равна смещению LBA раздела.

Зависит от ОС, системы и формата файловой системы.

Википедия - хороший ресурс по этой теме: http://en.wikipedia.org/wiki/Master_boot_record

Начните следовать макету. Записи таблицы разделов начинаются с 000001BE ... с 16-байтовой записи раздела ...

пропуская не очень важные части ...

1-й раздел - NTFS (000001C3) и начинается с 0000003f (посмотрите на 4 байта в little-endian, начиная с 000001c6), а размер - 01388acf (посмотрите на 4 байта в little-endian формате, начиная с 00001ca)

Если вы не можете прочитать страницу Википедии и понять ее ... вам, вероятно, не следует этим заниматься ... или вам следовало бы лучше учиться в классе.