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

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

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

введите описание здесь

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

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

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

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

Как вы получите этот ответ?

3 ответа

Решение

Разделы начинаются с 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, НО мы должны поменять порядок, потому что он в формате с прямым порядком байтов и нам нужен hex . Так что, чтобы сделать это разбить номер, как это 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 байта в младшем порядке, начиная с 000001c6), а размер - 01388acf (посмотрите на 4 байта в формате с прямым порядком байтов, начиная с 00001ca)

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

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