Главная · Сеть · Как создать раздел диска mbr. Создаем MBR и пишем свой менеджер мультизагрузки

Как создать раздел диска mbr. Создаем MBR и пишем свой менеджер мультизагрузки

И пришла на смену старого формата MBR. Новые материнские платы, как правило, поставляются с поддержкой UEFI. Это и логично, ведь система загружается быстрей, а таблица разделов GPT обеспечивает поддержку накопителей с большим объемом. MBR же позволяет адресовать не более 2.2 Тб адресного пространства.

Несмотря на очевидные преимущества GPT, иногда необходимо установить операционную систему на MBR диск. При наличии диска с GPT разметкой, его можно легко переделать под MBR.

Внимание! Вся информация на накопителе будет уничтожена после выполнения преобразования диска из формата GPT в MBR.

При установке системы на жесткий диск с таблицей разделов GPT может появиться ошибка: Невозможно установить Windows на диск 0 раздел 1 . Подробнее: Установка Windows на данный диск невозможна. Выбранный диск имеют стиль разделов GPT .

Способ 1 — самый простой и быстрый

При установке системы, надо перейти в Настройка диска , удалить все разделы на диске и создать заново. В этом случае диск будет создан с таблицей MBR.

Если у вас жесткий диск имеет размер более 2.2. Тб, то данная операция опять создаст на диске таблицу GPT. Можно обходным путём решить проблему, учитывая, что система будет видеть не более 2.2 Тб.

Если это решение не помогло, то надо попробовать второй способ и вручную создать необходимую таблицу разделов.

Способ 2 — сложный, если не помог способ 1

Необходимо загрузиться с установочного диска или флешки с операционной системой:
Выберите нужный язык -> Далее -> Установить -> Я принимаю условия лицензии -> Далее -> Полная установка.

— Нажать Shift + F10 (или Fn + Shift + F10 ) — запустится командная строка.

— Запустить в командной строке консольную утилиту для работы с дисками, разделами и томами в Windows.
diskpart
— Просмотреть список дисков, чтобы найти тот, который необходимо преобразовать.
list disk
— Выбрать необходимый диск.
select disk 0
— Очистить накопитель от других разделов.
clean
— Преобразовать GPT диск в MBR.
convert mbr
— Выйти из Diskpart
exit

Прошу обратить внимание на картинке на команду list disk . До преобразования диска в MBR в колонке GPT у диска стояла пометка *. После преобразования такой пометки нет. Значит диск был успешно преобразован в MBR.

На этом работа с диском завершена. Можно продолжить установку Windows уже на диск с таблицей MBR.

Дополнительная информация

На накопители с таблицей разделов GPT могут установиться и загружаться только 64-х битные операционные системы — Windows Vista x64 SP1, Windows 7 x64, Windows 8 x64, Windows Server 2008 x64 SP1, Windows Server 2008 R2 и Windows Server 2012.

Windows XP x64 и все x86 операционные системы Windows не могут загружаться с накопителя с GPT разделами, но могут считывать и записывать данные.

Windows XP x86 не может работать с GPT дисками вообще.

Для того, чтобы иметь возможность загружаться с GPT накопителя, необходимо загружаться через UEFI загрузчик.

Стиль разделов жесткого диска GPT дает больше преимуществ, чем устаревший стандарт MBR, как коммерческому сектору, где используется оборудование для хранения гигантских объемов данных, так и обычным пользователям. Плюсы GPT-дисков для обывателей – лучшее быстродействие и большая вероятность восстановления случайно или аварийно уничтоженных данных. Если материнская плата компьютера поддерживает режим работы (непременное условие работы с GPT-дисками), но по какой-то причине жесткий диск со сформированной структурой разделов и хранящимися данными имеет стиль разделов MBR, все можно изменить. Не без вреда для операционной системы, но с сохранением структуры диска и файлов на несистемных разделах. Windows все же придется переустанавливать. Конечно, есть способ обойтись и без переустановки Windows, но он усложнен процессом восстановления способности текущей операционной системы загружаться. Ведь придется вручную создавать раздел восстановления и шифрованный раздел EFI (используются вместо загрузочного раздела «Зарезервировано системой» на MBR-диске), а затем восстанавливать загрузчик систем UEFI. При переустановке Windows все эти моменты будут решены автоматически. Плюс к этому, получим чистую операционную систему без старых ошибок работы.

Итак, ниже рассмотрим, как установить Windows на конвертированный из MBR в GPT диск без потери данных на несистемных разделах. Но прежде поговорим о том, как происходит установка Windows на GPT-диск с потерей разметки и хранящихся данных.

1. Установка Windows на GPT-диск с потерей данных

Сохранять структуру разделов и данные MBR-диска не всегда есть смысл. Например, при подключении жесткого диска, приобретенного на вторичном рынке. Что делать в таком случае? Поскольку BIOS UEFI работает только с GPT-дисками, необходимо, соответственно, чтобы этот режим работы прошивки был активен, а процесс установки Windows проводился с загрузочной флешки UEFI. К этим моментам мы еще вернемся при рассмотрении способа установки Windows на GPT-диск без потери данных и разделов. Но если жесткий диск изначально был инициализирован как MBR, то в процессе установки Windows при включенном интерфейсе BIOS UEFI получим следующее уведомление.

Что сделать, чтобы установка Windows на GPT-диск стала возможной? Нужно удалить полностью все разделы на жестком диске...

И устанавливать операционную систему на нераспределенное дисковое пространство. Или с помощью кнопки «Создать» сформировать на диске несколько разделов, чтобы указать в качестве места установки системы только один из них, а остальные использовать как файлохранилища.

В процессе установки Windows жесткий диск будет автоматически преобразован в GPT.

Это способ установки Windows на GPT-диск с потерей структуры разделов и хранящихся данных. А как быть, если MBR-диск заполнен информацией, и ее много? Даже если важные данные есть куда временно перенести – на другой жесткий диск или съемный носитель, при больших объемах процедура переноса файлов туда и обратно займет время. Если данные и вовсе некуда временно поместить, выход только один – конвертирование диска из MBR в GPT с дальнейшей переустановкой Windows на системный раздел.

2. Подготовительный этап

Прежде чем приступить к процессу конвертирования, необходимо проверить кое-какие моменты и подготовить рабочие инструменты. Нужно:

  • Убедиться, что BIOS действительно поддерживает интерфейс UEFI;
  • Записать загрузочную флешку UEFI с установочным процессом 64-битных Windows 7, 8.1 и 10 (делается с помощью программы Rufus или утилиты для скачивания дистрибутива версий системы 8.1 и 10 Media Creation Tool);
  • Сохранить важные данные текущей Windows, в частности, файлы в папках пользовательского профиля, экспортировать настройки значимых программ, извлечь лицензионные ключи и проделать прочие действия, как перед обычным процессом переустановки операционной системы;
  • Скачать с официального сайта и установить на компьютер (в текущую Windows на MBR-диске) программу AOMEI Partition Assistant, с помощью которой и будет осуществлен процесс конвертирования жесткого диска из MBR в GPT. Программу можно скачать в бесплатной редакции Standard Edition, она в числе прочего функционала предусматривает возможность преобразования стилей разделов диска.

3. Конвертирование диска из MBR в GPT

Проведя все перечисленные выше действия и подготовив необходимые инструменты, запускаем AOMEI Partition Assistant. В нашем случае в окне программы увидим два жестких диска компьютера: один из них уже успешно прошел процедуру конвертирования из MBR в GPT, а другому, MBR-диску ее еще только предстоит пройти.

На MBR-диске вызываем контекстное меню, выбираем команду «Преобразовать в GPT-диск», затем в окошке подтверждения запуска операции жмем «Ок».

Появится программное окошко с советом прежде запуска операции убедиться, что материнская плата поддерживает режим работы BIOS UEFI. В этом окошке также сообщается, что если конвертируемый диск является загрузочным, и на нем установлена операционная система, последняя по завершении операции больше не сможет загрузиться. Вот почему важно всерьез отнестись к подготовительному этапу операции и проделать все рекомендуемые в предыдущем пункте статьи действия. Жмем «Да».

В левом верху окна нажимаем кнопку «Применить».

Нажатие «Да» – это точка невозврата, текущая Windows больше не сможет загрузиться, поскольку жесткий диск по завершении операции будет преобразован в GPT. О завершении операции оповестит такое вот программное окно, в котором единственным возможным действием будет нажатие «Ок».

Перед нажатием «Ок» проверяем, подключена ли загрузочная флешка UEFI с установочным процессом Windows. После нажатия «Ок» компьютер перезагрузится.

4. Настройка BIOS UEFI

При следующем запуске компьютера нужно сразу же войти в BIOS, чтобы выставить режим работы UEFI. В BIOS материнской платы Asus это делается следующим образом. В главном меню жмем либо кнопку «Дополнительные настройки», либо клавишу F7.

Нажатием «Ок» подтверждаем вход в расширенный режим. Переходим во вкладку «Загрузка», далее выбираем раздел «CSM» (он должен быть включен, то есть напротив него должно стоять значение «Enabled»). В графе «Параметры загрузочных устройств» устанавливаем значение «UEFI и Legacy UpROM» – режим совместимости, при котором возможна загрузка как в режиме UEFI, так и в Legacy. Затем с помощью кнопки «Back» выходим из настроек раздела.

Если на компьютер будет устанавливаться Windows 7, необходимо еще (Secure Boot) – войти в раздел «Безопасная загрузка» и в графе «Тип ОС» установить значение «Другая ОС». И выйти на уровень вверх кнопкой «Back».

В перечне устройств загрузки выбираем загрузочную флешку UEFI.

Сохраняем внесенные в BIOS изменения: жмем клавишу F10 и выбираем «Да».

В BIOS других материнских плат, соответственно, настройки будут иными. Но их суть будет сводиться к тому же, что описано для материнской платы Asus:

  • Установка режима работы UEFI (или режима совместимости, если таковой поддерживается, как в рассмотренном примере);
  • Отключение безопасной загрузки для операционных систем, не соответствующим сертификатам стандарта UEFI;
  • Выставление приоритета загрузки с флешки UEFI;
  • Сохранение настроек.

5. Установка Windows на GPT-диск

После сохранения настроек BIOS UEFI компьютер загрузится с флешки. Проходим начальные этапы процесса установки и немного задержимся на выборе места установки. Чтобы данные на несистемных разделах диска остались в целости и сохранности, необходимо удалить только два раздела, которые на MBR-диске отвечали за запуск Windows – первый загрузочный раздел с объемом в 350 или 500 Мб (в зависимости от версии Windows) и второй раздел, на котором была установлена сама операционная система. Чтобы не ошибиться, особенно в случае, если жестких дисков к компьютеру подключено несколько, лучше ориентироваться на размер разделов. В нашем примере только что конвертированный из MBR в GPT диск процессом установки Windows определяется как Диск 0. Удаляем сначала первый раздел с помощью кнопки «Удалить».

Затем повторяем процедуру со вторым разделом.

Делаем клик на образовавшемся в результате удаления разделов незанятом пространстве и жмем кнопку «Далее» для продолжения процесса установки Windows.

Отличного Вам дня!

Современные жесткие диски (HDD) становятся всё более вместительными и менее дорогими, и многие люди считают, что лучше купить один большой накопитель – в 2 – 3 – 4 терабайта, чем несколько маленьких. Но не все осознают, с какими сложностями они столкнутся при установке на такой диск операционной системы. Дело в том, что диски объемом более 2 ТиБ используют нестандартный, новый тип организации данных – таблицу разделов GPT. В ней и таятся “сюрпризы”, которые поджидают неискушенного юзера.

Основные отличия дисков стандарта GPT (новых) и MBR (старых)

  • Разбиение дисков по стандарту MBR не может адресовать пространство, превышающее 2,2 ТиБ, а для дисков GPT никаких ограничений нет (вернее, их предел составляет астрономическое по нашим меркам число – 8,6 миллиардов ТиБ).
  • На диски GPT можно установить только 64-разрядную версию Windows, начиная от Windows Vista x64. 64-разрядная Windows XP и все версии x86, начиная с Vista, могут писать и считывать данные с разделов GPT, но загружаться с них не могут. Windows XP x86 и более старшие версии не поддерживают платформу GPT.
  • Таблица разделов GPT – это часть интерфейса UEFI – нового BIOS, если можно так выразиться. Компьютеры с традиционными BIOS структуру GPT не поддерживают.

Но это не значит, что современные, вместительные жесткие диски GPT нельзя использовать по старинке – на компьютерах без UEFI или для установки 32-битных систем. Можно: для этого таблицу разделов GPT всего лишь нужно переделать в MBR. Часть объема – та, что за пределами 2,2 ТиБ, будет недоступна, но с этим уже ничего не поделаешь.

Преобразование таблицы разделов из GPT в MBR

Работа с жестким диском до 2 ТиБ

При установке Windows 7 x86 (32-разрядной версии) на диск GPT выскакивает сообщение об ошибке, четко указывающее на причину:

Если ваш жесткий диск меньше 2 ТиБ, проблему решит полное форматирование с удалением всех разделов. Это можно сделать через опцию “Настройка диска” из комплекта дистрибутива.

  • Когда в ходе установки Windows 7 вы доберетесь до выбора раздела, куда ставить систему, и увидите сообщение об ошибке – нажмите кнопочку “Настройка диска”.

  • Выделите каждый раздел, начиная снизу, и удалите нажатием одноименной кнопки. У вас должно получиться одно общее неразмеченное пространство, равное объему всего жесткого диска.

  • Теперь нужно создать каждый раздел заново. Для этого нажмите кнопочку “Создать”, задайте желаемый размер партиции и щелкните “Применить”. Повторите операцию столько раз, сколько разделов вы хотите получить. Система попросит вас выделить область для ее нужд (загрузочный раздел 100 mb), желательно согласиться.

  • Форматирование вновь созданных разделов производится нажатием кнопки “Форматировать”. После этих действий таблица разделов жесткого диска GPT будет преобразована в MBR, пригодный для инсталляции 32-разрядной версии Windows 7. Дальнейшая установка проходит без особенностей.

Работа с жестким диском более 2 ТиБ

Для создания MBR на дисках столь большой емкости потребуется утилита DiskPart , входящая в состав дистрибутива семерки. Запускается и работает она через командную строку.

  • Дойдя до выбора места установки, запустите командную строку нажатием на клавиатуре “Shift” + “F10”. В открывшееся черное окошко впишите: diskpart и нажмите Enter.
  • Следом скомандуйте: list disk – для просмотра всех установленных на компьютере жестких дисков.
  • Выберите диск, на котором вы будете создавать MBR. Если он один, впишите команду select disk 0 , если несколько – вместо нуля подставьте порядковый номер того диска, который вам нужен.
  • Следом удалите все данные и всю разметку с выбранного HDD командой clean .
  • Команда convert mbr преобразует таблицу GPT в MBR.
  • Для закрытия консоли введите: exit .

  • Далее можете переходить к установке Windows 7.

Подготовка диска к установке Windows 7 с помощью сторонних программ: разбивка, форматирование и прочее

Разметить и отформатировать HDD перед инсталляцией Windows 7 можно и с помощью сторонних программ, таких как “Acronis Disk Director”, “Paragon Partition Manager” и т. п. Приложений для этих целей существует достаточно, но эти два знакомы очень многим и являются лучшими в своем классе, поэтому их и будем рассматривать.

Acronis Disk Director

Мощный инструмент управления дисками. Выпускается в двух версиях – для работы в среде Windows и как загрузочный образ. Второй позволяет переразбивать, форматировать, удалять, перемещать и восстанавливать тома, переносить данные из раздела в раздел не загружаясь в Windows.

Принцип использования Acronis Disk Director интуитивно понятен – каждая его опция имеет четкое, недвусмысленное определение. Интерфейс – английский и русский.

Для того, чтобы поделить HDD на разделы и выполнить форматирование в любой из предложенных файловых систем (их список довольно солидный), выберите пункт “Создание разделов” и действуйте по инструкции мастера.

Acronis Disk Director имеет одну очень полезную функцию – мастер восстановления разделов. Он позволяет восстановить на диске удаленные тома со всеми их данными. Если, конечно, информация не была перезаписана.

Paragon Partition Manager

Другой полнофункциональный набор инструментов управления дисками. Представляет собой загрузочный образ, с помощью которого можно делать очень много чего: разбивать диски на тома, форматировать в различных файловых системах, делать загрузочные меню, создавать пакеты инсталляции дистрибутивов ОС (не только Windows), управлять загрузчиками систем и т. д.

Что же касается функций управления разделами, то Paragon Partition Manager позволяет их создавать, удалять, делить, копировать, восстанавливать, объединять, делать их резервные копии и переносить на внешние носители. Можно даже перенести на другой все содержимое жесткого диска. Кроме перечисленного, приложение имеет сетевые функции, дающие возможность создать соединение с другими компьютерами локальной сети.

Несмотря на англоязычный интерфейс, управляться с Partition Manager довольно легко. Большинство опций запускают работу встроенного мастера, который ведет пользователя через все этапы выбранной операции. Для освоения программы не нужно много времени, а результат того, что делается, всегда получается хорошим.


Управление разделами, форматирование и другие операции через менеджер дисков

Перераспределить дисковое пространство из-под работающей системы можно и через “Управление дисками” – собственное средство Windows 7. Инструмент находится в наборе “Управление компьютером”.

  • Запустите панель управления и откройте приложение “Администрирование”. Из списка административных инструментов выберите “Управление компьютером”.

  • Следом выберите “Управление дисками”.

  • Перед вами откроется “карта” установленных на компьютере жестких дисков и других накопителей – флешек, карт памяти и прочего, если они подключены.

Если диски поделены на части – на карте отобразится каждый раздел, иначе называемый томом, с его буквой, размером и обозначением типа: основной или логический. Вверху – таблица свойств каждого тома. Здесь вы можете посмотреть, с какого из них загружается ваша система – загрузочный раздел имеет атрибут “Активный”.

Активным в Windows 7 является 100-мегабайтный раздел в самом начале жесткого диска (стандарта MBR). Он не имеет буквы и не отображается в проводнике.

Правым кликом по одному из разделов на карте диска открывается список доступных команд: какие операции можно проделать над этим томом.

Так, над логическим разделом D нашего единственного жесткого диска можно проделать следующее:

  • открыть (через проводник);
  • изменить букву;
  • изменить путь к диску;
  • форматировать;
  • расширить;
  • сжать;
  • удалить;
  • посмотреть свойства;
  • прочитать справку.

Если удалить букву тома, он не будет отображаться в проводнике Windows, как и остальные скрытые разделы. Такие как SYSTEM – где находится загрузчик Windows 7, и раздел RECOVERY (восстановления). Это защищает хранимые там файлы от случайного повреждения и удаления.

Команда “форматирование” уничтожит всю информацию, команды “расширить” и “сжать” предназначены для управления размерами раздела. “Удалить”, соответственно, превратит выбранную область жесткого диска в неразмеченное пространство.

Словом, работа с менеджером диска не сложна, но от пользователя требует внимания и осторожности.

Перед тем, как задать вопрос в теме, касающейся MBR, пожалуйста, прочтите следующее:

1. Что такое MBR и почему она важна в работе компьютера?
В переводе с английского, MBR - аббревиатура, означающая Main/Master Boot Record или Основная Загрузочная Запись. Эта запись лежит в первом физическом секторе жесткого диска и играет основную роль в загрузке операционной системы, вернее, выборе, с какого раздела необходимо загрузить операционную систему. Таким образом, MBR содержит информацию о разделах жесткого диска (таблицу разделов - partitions table). При загрузке компьютера, MBR загружается в память BIOS (Basic Input/Output System - Базовая Система Ввода/Вывода), где ей и передается управление загрузкой системы, вернее, выбором, какой раздел сделать активным. Вот почему в системе Acer для того, чтобы воспользоваться системой восстановления системы (eRecovery Management) со скрытого раздела, необходимо одновременное нажатие клавиш Alt-F10 при загрузке компьютера (а именно во время появления логотипа Acer, когда выполняется тест POST BIOSa). Такое сочетание клавиш позволяет MBR выбрать в качестве активного раздела - первый (PQService). При обычной загрузке компьютера, активным разделом остается второй, на котором и установлена основная пользовательская операционная система. На приведенном рисунке я попытался графически изобразить принцип работы MBR, где Вы можете увидеть первый скрытый раздел "PQService", второй раздел с установленной системой "C:" и третий раздел для данных пользователя "D:".

Здесь представлены диски с тремя и четырьмя разделами (в последнем случае - есть в наличии скрытый четвертый раздел с Instant-On-Arcade "IOArcade", позволяющий загружать мультимедийную оболочку без загрузки основной операционной системы).

2. Не работает сочетание клавиш Alt+F10, что делать?
Если при нажатии клавиш Alt+F10 Вы не можете загрузить компьютер со скрытого раздела (войти в Acer eRecovery Management), то это означает замену оригинальной MBR от Acer основной загрузочной записью установленной Вами операционной системы. Для установки оригинальной MBR (от Acer) в системе Windows XP, Vista, воспользуйтесь этим патчем (распакуйте и запустите). Если была предустановлена Windows 7, то после распаковки запустите этот патч . После перезагрузки системы снова попробуйте нажать сочетание клавиш Alt+F10.

3. Вы удалили скрытый раздел (разделы) и не собираетесь пользоваться Acer eRecovery Management. Что делать в этом случае?
Для начала необходимо отключить функцию "D2D Recovery" в БИОСе. После этого Вы можете установить самостоятельно операционную систему или воспользоваться дисками восстановления, поставляемыми с Вашим компьютером или сделанными Вами с помощью программы Acer eRecovery. В последнем случае, программа восстановления автоматически определит отсутствие скрытого раздела и установит систему в первый раздел, с которого и будет в дальнейшем загружаться установленная операционная система.

В дополнение: для восстановления загрузчика Windows XP (в случае, если эта ОС установлена), воспользуйтесь этой утилитой . Будьте внимательны! Запускайте файл только в случае, если у Вас устанволена Windows XP. Если требуется восстановить загрузчик Windows Vista - запустите эту утилиту .

Если вы хотите восстановить MBR в среде DOS, утилита mbrwrwin.exe не будет работать. Используйте для этой цели .

Все вопросы высказываем в этой теме форума:

Материал подготовлен специально для http://сайт (автор – Гурьев Денис, GDenis)
e-mail [email protected]
(изменение материала, копирование и распространение только с разрешения автора)

В этом разделе я расскажу, как написать собственный менеджер мультизагрузки. Менеджер мультизагрузки представляет собой код, находящийся в загрузочном секторе, и по выбору пользователя загружающий любую из нескольких операционных систем, установленных на компьютере. В процессе обсуждения вы познакомитесь с прерыванием INT 13h , таблицей разделов и т.д. Стандартный загрузчик, устанавливаемый большинством операционных систем по умолчанию, слишком примитивен, чтобы его воспринимать всерьез, а нестандартные загрузчики от независимых разработчиков обычно слишком неповоротливы и ненадежны. Вот и давайте напишем свой! Пока мы будем его писать, мы познаем дао и дзен ассемблера, научимся отлаживать программы без отладчика и поближе познакомимся с низкоуровневыми интерфейсами винчестера.

Интерфейс INT 13h

Управлять дисками можно как через порты ввода/вывода, так и через BIOS. Порты намного более могущественны и интересны, однако BIOS программируется намного проще, к тому же она поддерживает большое количество разнокалиберных накопителей, абстрагируясь от конструктивных особенностей каждой конкретной модели. Поэтому будем действовать через нее, а точнее, через интерфейс прерывания INT 13h .

Номер функции заносится в регистр AH . В случае чтения он равен двум. Регистр AL отвечает за количество обрабатываемых секторов. Так как мы собираемся читать по одному сектору за операцию, занесем сюда единицу. Регистр DH хранит номер головки, a DL - номер привода (80h - первый жесткий диск, 81h - второй и т.д.). Пять младших битов регистра CL задают номер сектора, оставшиеся биты регистра CL и восемь битов регистра CH определяют номер цилиндра, который мы хотим прочитать. Регистровая пара ES:BX указывает на адрес буфера-приемника. Вот, собственно говоря, и все. После выполнения команды INT 13h считываемые данные окажутся в буфере, а если произойдет ошибка (например, головка "споткнется" о BAD-сектор), то BIOS установит флаг переноса (carry flag), и мы будем вынуждены либо повторить попытку, либо вывести грустное сообщение на экран.

Код этой программы на языке ассемблера представлен в листинге 5.6.

Листинг 5.6. Код, считывающий загрузочный сектор или расширенную таблицу разделов

MOV SI, 1BEh ; Перейти к первому разделу
MOV AX, CS ; Настраиваем ES
MOV ES, AX
MOV BX, buf ; Смещение буфера
...
read_all_partitions:
MOV AX, bud ; Читать 1 сектор с диска

MOV DH, ; Стартовый номер головки
MOV CX, ; Стартовый сектор с цилиндром INT 13h
JC error ; Ошибка чтения
;Обрабатываем считанный boot-сектор или расширенную таблицу разделов
;===================================================================
;
CMP byte , 80h
JZ LOAD_BOOT ; Это загрузочный сектор
; Передаем на него управление
CMP byte , 05h
JZ LOAD_CHS_EXT ; Это расширенная таблица разделов
; в формате CHS
CMP byte , 0Fh
JZ LOAD_LBA_EXT ; Это расширенная таблица разделов
; в формате LBA
ADD SI, 10h ; Переходим на следующий раздел
CMP SI, 1EEh
JNA read_all_partitions ; Читаем все разделы один за другим
...buf rb 512 ; Буфер на 512 байт

Запись сектора в режиме CHS происходит практически точно так же, только регистр AH равен не 02h , a 03h . С режимом LBA разобраться намного сложнее, но мы, как настоящие хакеры, его обязательно осилим.

Чтение сектора осуществляется функцией 42h(AH = 42h). В регистр DL , как и прежде, заносится номер привода, а вот регистровая пара DS:SI указывает на адресный пакет (disk address packet), представляющий собой продвинутую структуру формата, описанного в табл. 5.4.

Таблица 5.4 . Формат адресного пакета, используемый для чтения и записи секторов в режиме LBA

Смещение Тип Описание
00h BYTE Размер пакета - 10h или 18h
01h BYTE Поле зарезервировано и должно быть равно нулю
02h WORD Сколько секторов читать
04h DWORD 32-разрядный адрес буфера-приемника в формате seg:offs
08h QWORD Стартовый номер сектора для чтения
10h QWORD 64-разрядный плоский адрес буфера-приемника. Используется только в случае, если 32-разрядный адрес равен FFFF:FFFF

Код, читающий сектор в режиме LBA, в общем случае выглядит так, как показано в листинге 5.7.

Листинг 5.7. Код, осуществляющий чтение сектора с диска в режиме LBA

MOV DI, 1BEh ; Перейти к первому разделу
MOV AX, CS ; Настраиваем...
MOV buf_seg ; ...сегмент
MOV EAX, ; Смещение partition относительно
; начала раздела
ADD EAX, EDI ; EDI должен содержать номер сектора
; текущего MBR
MOV ;
...
read_all_partitions:
MOV АН, 42h ; Читать сектор в режиме LBA
MOV DL, 80h ; Читать с первого диска
MOV SI, dap ; Смещение адресного пакета INT 13h
JC error ; Ошибка чтения
...
dap:
packet_size db 10h ; размер пакета 10h байт
reserved db 00h ; "Заначка" для будущих расширений
N_SEC dw 01h ; Читаем один сектор
buf_seg dw 00h ; Сюда будет занесен сегмент буфера-приемника
buf_off dw buf ; Смещение буфера-приемника
X_SEC dd 0 ; Сюда будет занесен номер сектора для чтения
dd 0 ; Реально не используемый хвост
; 64-битного адреса
buf rb 512 ; Буфер на 512 байт

Запись осуществляется аналогично чтению, только регистр AH содержит не 42h , a 43h . Регистр AL определяет режим: если бит 0 равен 1, BIOS выполняет не запись, а ее эмуляцию. Бит 2, будучи взведенным, задействует запись с проверкой. Если регистр AL равен 0, выполняется обыкновенная запись по умолчанию.

Теперь, освоившись с дисковыми прерываниями, перейдем к обсуждению остальных аспектов программирования.

Создаем код загрузчика

Лучше всего загрузчики программируются на FASM. С точки зрения ассемблера загрузчик представляет собой обыкновенный двоичный файл, предельно допустимый объем которого составляет 1BBh (443) байт. Немного? Но не будем спешить с выводами. Всякий раздел всегда начинается с начала цилиндра, а это значит, что между концом MBR и началом раздела имеется, по меньшей мере, n свободных секторов, где n == sectors per track . Практически все современные винчестеры имеют по 64 сектора на дорожку, что дает нам: 443 + 63*512 == 32 699 байт или приблизительно 32 Кбайт. Да в этот объем даже графический интерфейс с мышью уместить можно! Однако делать этого мы не будем. Настоящие хакеры работают в текстовом режиме с командной строкой.

Как уже говорилось, BIOS загружает MBR по адресу 7C00h , поэтому в начале ассемблерного кода должна стоять директива ORG 7C00h , а еще - USE16 , ведь загрузчик выполняется в 16-разрядном реальном режиме. Позже, при желании, он может перейти в защищенный режим, но это будет уже потом. Не будем лезть в такие дебри.

Обнаружив загрузочный раздел (а обнаружить это можно по флагу 80h , находящемуся по нулевому смещению от начала раздела), загрузчик должен считать первый сектор этого раздела, поместив его в памяти по адресу 0000:7C00h , то есть в точности поверх своего собственного тела. А вот это уже нехорошо! И чтобы не вызвать крах системы, загрузчик должен заблаговременно перенести свое тело по другому адресу, что обычно осуществляется командой MOVSB . Копироваться можно по любому из адресов памяти - от 0080:0067h до 9FE00h . Память, расположенную ниже 0080:0067h , лучше не трогать, так как здесь находятся вектора прерываний и системные переменные BIOS, а от A000h и выше начинается область отображения ПЗУ, так что предельно доступный адрес равен A000h - 200h (размер сектора) == 9FE00h .

Не забывайте, что трогать регистр DL ни в коем случае нельзя, поскольку в нем передается номер загрузочного привода. Некоторые загрузчики содержат ошибку, всегда загружаясь с первого жесткого диска, и это в то время, как BIOS уже больше 10 лет как позволяют менять порядок загрузки, и потому загрузочным может быть любой привод.

По правде говоря, FASM - это единственный известный мне ассемблер, "переваривающий" команду дальнего вызова JMP 0000:7C00h напрямую. Все остальные ассемблеры заставляют извращаться приблизительно так: PUSH offset_of_target/PUSH segment_of_target/RETF . Здесь мы заталкиваем в стек сегмент и смещение целевого адреса и выполняем дальний RETF , переносящий нас на нужное место. Еще можно воспользоваться самомодифицирующимся кодом, собрав команду JMP FAR "вручную", или просто расположить целевой адрес в одном сегменте с исходным адресом (например, 0000:7C00h ? 0000:7E00h). Однако эти подходы муторны и утомительны.

В общем, скелет нашего загрузчика будет выглядеть так, как показано в листинге 5.8.

Листинг 5.8. Скелет простейшего загрузчика, написанный на FASM

use16
ORG 7C00h
CLD ; Копируем слева направо
; (в сторону увеличения адресов)
MOV SI,7C00h ; Откуда копировать
MOV DI,7E00h ; Куда копировать
MOV CX,200h ; Длина сектора
REP MOVSB ; Копируем
; // Выбираем раздел, который мы хотим загрузить,
; // считываем его в память по адресу 0000:7C00h
; // (см. листинги 5.7 и 5.6)
JMP 0000:7C00h ; Передаём управление на загрузочный сектор

Записываем загрузчик в главную загрузочную запись

Под старушкой MS-DOS записать свой загрузчик в MBR было просто. Для этого достаточно дернуть прерывание INT 13h , функция 03h (запись сектора). Но под Windows NT этот прием уже не работает, и приходится прибегать к услугам функции CreateFile . Если вместо имени открываемого файла указать название устройства, например, .PHYSICALDRIVE0 (первый физический диск), мы сможем свободно читать и записывать его сектора вызовами ReadFile и WriteFile соответственно. При этом флаг dwCreationDisposition должен быть установлен на значение OPEN_EXISTING , а флаг dwShareMode - на значение FILE_SHARE_WRITE . Еще потребуются права системного администратора, иначе ничего не получится.

Законченный пример вызова CreateFile выглядит, как показано в листинге 5.9.

Листинг 5.9. Открытие непосредственного доступа к жесткому диску под Windows NT

XOR EAX,EAX
PUSH EAX ; hTemplateFile
PUSH dword FILE_ATTRIBUTE_NORMAL ; dwFlagsAndAttributes
PUSH dword OPEN_EXISTING ; dwCreationDisposition
PUSH EAX ; lpSecurityAttributes
PUSH dword FILE_SHARE_WRITE ; dwShareMode
PUSH dword (GENERIC_WRITE OR GENERIC_READ) ; dwDesiredAccess
PUSH DEVICE_NAME ; Имя устройства
CALL CreateFile ; Открываем устройство
INC EAX
TEST EAX,EAX
JZ error
DEC EAX
...
DEVICE_NAME db ".PHYSICALDRIVE0",0
BUF RB 512 ; Буфер

Открыв физический диск и убедившись в успешности этой операции, мы должны прочитать оригинальный MBR-сектор в буфер, перезаписать первые 1BBh байт, ни в коем случае не трогая таблицу разделов и сигнатуру 55h AAh (мы ведь не хотим, чтобы диск перестал загружаться, верно?). Теперь остается записать обновленный код MBR на место и закрыть дескриптор устройства. После перезагрузки все изменения вступят в силу.

Примечание

Правда, вполне возможно, что внесенные вами изменения и не подумают вступать в силу. Загрузчик жестоко мстит за малейшие ошибки проектирования. Поэтому, чтобы не потерять содержимое своих разделов, для начала лучше попрактиковаться на VMWare или любом другом эмуляторе PC.

Под Windows 9x , разумеется, трюк с CreateFile не работает. Но там можно воспользоваться симуляцией прерываний из DMPI или обратиться к драйверу ASPI. Оба способа были подробно описаны в моей книге "Техника защиты компакт-дисков от копирования". Однако, хотя в ней речь идет о CD, а не о HDD, жесткие диски программируются аналогично.

Прежде чем писать собственный загрузчик, рекомендуется изучить существующие нестандартные загрузчики. Все перечисленные ниже загрузчики распространяются по лицензии GPL или BSD, то есть без ограничений.

Ge2000.asm - тщательно прокомментированный Stealth-вирус, подменяющий системный загрузчик своим собственным. Хоть это и вирус, но он не опасен и может быть использован в учебных целях.

Mbr.asm - предельно простой, но полнофункциональный загрузчик с поддержкой разделов свыше 8 Гбайт.

Bootasm - отличный менеджер мультизагрузки с подробными комментариями, переходит в защищенный режим, может грузиться с дискеты, компакт-диска, zip-дискеты, винчестера и т.д. Поддерживает разделы свыше 8 Гбайт, показывает индикатор загрузки и делает множество других полезных вещей, которые не помешает изучить.

Отладка кода загрузчика

Отлаживать код загрузчика невероятно трудно. Загрузчик получает управление задолго до запуска операционной системы, когда никакие отладчики еще не работают. Несколько лет назад это представляло огромную проблему, и при разработке "навороченных" загрузчиков приходилось либо встраивать в них интегрированный мини-отладчик, либо выискивать ошибки вручную, изучая листинги с карандашом в руке. С появлением эмуляторов все изменилось. Достаточно запустить такой эмулятор, как BOCHS (рис. 5.5), и вы сможете отлаживать загрузчик как и любую другую программу!


Рис. 5.5 . Внешний вид эмулятора BOCHS в процессе отладки загрузочного сектора

Программирование загрузчиков - одна из тех немногих областей, в которых применение ассемблера действительно обоснованно. Языки высокого уровня для этого слишком абстрагированы от оборудования. Кроме того, они недостаточно гибки. Вот почему хакеры так любят возиться с загрузчиками, добавляя сюда множество новых возможностей, включая автоматическую загрузку с CD-ROM или дисков SCSI, противодействие вирусам, парольную защиту с шифрованием данных и т.д. Здесь действительно есть, где развернуться, и есть на чем показать все свои возможности. В качестве дополнительного чтения я рекомендовал бы вам несколько весьма интересных источников. Вот они:

? MBR and OS Boot Records - масса интересного материала по MBR (на английском языке): http://thestarman.narod.ru/asm/mbr/MBR_in_detail.htm ;

? BOCHS - отличный эмулятор со встроенным отладчиком, значительно облегчающий процесс "пуско-наладки" загрузочных секторов. Бесплатен, распространяется с исходными текстами: http://bochs.sourceforge.net ;

? http://www.koders.com (рис. 5.6) - отличный поисковик, нацеленный на поиск исходных кодов, по ключевому слову MBR выдает огромное количество загрузчиков на любой вкус;


Рис. 5.6 . Поиск исходных текстов загрузчиков MBR на сайте Koders

? Ralf Brown Interrupt List (рис. 5.7) - знаменитый "Список прерываний" (Interrupt List) Ральфа Брауна (Ralf Brown), описывающий все прерывания, включая недокументированные (на английском языке): http://www.pobox.com/~ralf ;


Рис. 5.7 . Просмотр легендарного "Списка прерываний" Ральфа Брауна

OpenBIOS - проект "Открытого BIOS", распространяемого в исходных текстах. Помогает понять некоторые неочевидные моменты обработки системного загрузчика: http://www.openbios.info/docs/index.html .