Учитывая 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)
Если вы не можете прочитать страницу Википедии и понять ее ... вам, вероятно, не следует этим заниматься ... или вам следовало бы лучше учиться в классе.