Напишите код MBR

Вы случайно не определили отдельный файл ресурсов (рисование, макет) для старых версий Android? Ваша трассировка стека говорит о том, что она не может накачать кнопку из-за отсутствия прорисовки.

11
задан 20 February 2009 в 06:00
поделиться

8 ответов

Вы могли изучить GRUB. Я ни в коем случае не эксперт в коде MBR, и это было долго, так как я работал *, отклоняют ОС, но я помню, что загрузчик, обработанный шаг за шагом и, загрузил этапы из диска перед запущенной ОС. Вы могли записать свой собственный этап, чтобы сделать работу, в которой Вы нуждаетесь сделанный перед загрузками ОС и затем загружаете ОС. Я не уверен, насколько практичный эта опция, особенно так как код, кажется, посреди переписывания, потому что версия "прежней версии" была неудобна в сопровождении согласно документации.

1
ответ дан 3 December 2019 в 01:02
поделиться

Я нашел подобный вопрос, который может помочь:

Изменение MBR Windows

Однако можно хотеть уточнить то, что Вы планируете сделать. Поскольку я узнал меня, код загрузчика может быть довольно утомительным для работы с. Кроме того, я, конечно, протестировал бы это с дискетой, если это возможно.

До фактического выполнения этого всего из Windows я немного невежествен. Примерно весь мой опыт программирования к этой точке находился под средой Unix.

2
ответ дан 3 December 2019 в 01:02
поделиться

Почему это обходится без помощи высказывания, что Windows не предоставляет прямой доступ к диску? Страница MSDN для CreateFile () говорит это:

Прямой доступ к диску или к объему ограничивается. Для получения дополнительной информации см. "Изменения в файловой системе и в стопке устройства хранения данных для ограничения прямого доступа к диску и прямого доступа объема в Windows Vista и в Windows Server 2008" в Базе знаний Справки и Поддержки по http://support.microsoft.com/kb/942448.

Windows Server 2003 и Windows XP/2000: Прямой доступ к диску или к объему не ограничивается этим способом.

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

4
ответ дан 3 December 2019 в 01:02
поделиться

Существуют различные способы записать в загрузочный сектор диска, и существует общая информация, которую я использовал назад, когда я экспериментировал с домашним пивом разработка ОС: http://wiki.osdev.org/

Я лично просто загружаюсь в соответствии с Linux и использую dd:

  1. Резервное копирование сначала

    dd, если =/dev/sda = ~/windows_bootloader.bin bs=512 count=1

  2. Демонтируйте загрузчик

    ndisasm-b16-o7c00h ~/windows_bootloader.bin> ~/windows_bootloader.asm

  3. Сделайте свои модификации и повторно соберитесь

    nasm ~/windows_bootloader.asm-f мусорное ведро ~/modified_bootloader.bin

  4. Перезапишите загрузчик

    dd, если = ~/modified_bootloader.bin =/dev/sda bs=512 count=1

Это принимает Ваш, что 'sda' является корректным блочным устройством. И обратите внимание, что шаг 4 только копирует файл в/dev/sda (который он мог, но затем Вы могли бы перезаписать больше, чем просто первый сектор если выходной двоичный файл> 512 байтов),

Очевидно, Вы не собираетесь хотеть отладить этот подход к живой системе. Это сохранит Вас много головных болей для использования некоторого x86 эмулятора как bochs, qemu или VMware Server.

Однако как Michael Burr заявил, это, вероятно, будет плохой идеей. При изменении загрузчика Windows, вероятно, оставит Вас с минимальной комнатой для Вашего собственного кода.

20
ответ дан 3 December 2019 в 01:02
поделиться

В основном я полагаю, что вставлю вызов и оставлю остальную часть MBR одной

Что назовет этот вызов подпрограммы? Единственный код в памяти в той точке - то, что находится в MBR или ROM.

Думайте тщательно о том, нужно ли Вам действительно это, или это нет лучшей альтернативы, прежде чем Вы проведете слишком много времени на ней. Сторонний код, написанный к MBR (кроме MBR, который загрузчик ОС помещает там), часто не хорошо принят пользователями потому что:

  • антивирусные программы часто отмечают его как подозрительный код, потому что это - техника, вирусы раньше получали контроль над машинами
  • программы использовали метод вставки себя в MBR и хранение дополнительного кода и данных в 'зарезервированных' секторах диска (потому что существует действительно не очень, можно сделать и сохранить в MBR). К сожалению, с тех пор там бесполезно, стандартный способ на самом деле зарезервировать те секторы, эта техника (иногда используемый для защиты от копирования) может вызвать повреждение структур данных на диске (т.е., все данные по диску идут пока). Пользователи действительно ненавидят это. Я верю, однажды Ускоряются, использовал схему защиты, которая сделала что-то вроде этого и стояла перед довольно большой обратной реакцией.

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

5
ответ дан 3 December 2019 в 01:02
поделиться

BIOS загружает компьютер от жесткого диска (или дисковод для гибких дисков) путем чтения первого сектора (512 байтов) каждого устройства загрузки и проверки на определенный набор байтов подписи. Если те байты найдены, 512-байтовый сектор копируется в поршень (в определенном положении) и переходы BIOS для выполнения его.

Другой затем байты подписи, 446 байтов в секторе доступны для Вас для использования в качестве программы начальной загрузки, но программа начальной загрузки должна подойти полностью к тому сектору! Начиная с 446 байтов не является очень большим, необходимо будет выполнить вызовы BIOS для копирования других секторов от жесткого диска (или дисковод для гибких дисков, или безотносительно) в поршень для выполнения их.

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

Именно так операционная система буквально "поднимается своими собственными начальными загрузками"

См. http://en.wikipedia.org/wiki/Master_boot_record

Теперь, нет никакой причины, которую Вы не могли записать загрузочному коду в C или C++ (или большинство что-либо еще) за исключением того, что с блоком, Вы знаете точно, какой код будет сгенерирован, и легко выполнить вызовы BIOS.

Я предложил бы, чтобы Вы записали 512-байтовый дисковод для трамбовки копировального устройства, которое загружает программу из диска в поршень и затем переходит к начальному адресу программы. Можно затем записать программу в любом языке, который Вы хотите. Следует иметь в виду, что, когда Ваш загрузочный код начинает работать, те 512 байтов являются единственной вещью, на которую можно рассчитывать как в поршне. (Ну, BIOS там, можно выполнить вызовы BIOS. BIOS также поместит некоторую информацию о системе в определенных местах в поршне...), Если Вы захотите вызвать какие-либо функции, Вы записали, что вне того сектора, необходимо загрузить их в поршень сами.

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

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

Кроме того, Michael Burr прав, получая то, что Вы хотите сделанный, будет кошмаром.

В ответе на Ваш комментарий о том, как на самом деле записать это на жестком диске, существует несколько "необработанных записей" программы, которые могут скопировать в сектор на диске. Кроме того, Вы могли просто загрузить от Linux живой CD и использовать dd для записи данных в сектор по Вашему выбору на блочном устройстве по Вашему выбору. - Простой как круг та часть.

9
ответ дан 3 December 2019 в 01:02
поделиться

Редактировать MBR вполне возможно из Windows (XP). Для этого используется шестнадцатеричный редактор HxD, вы можете буквально скопировать и вставить шестнадцатеричный файл поверх MBR, даже на ваш активный системный диск (используйте с осторожностью! :)) http://mh-nexus.de/en / hxd /

В качестве отправной точки a может получить MBR, исходный код которой доступен, например Grub. (Так что пусть grub выполнит загрузку Windows). Это хорошая отправная точка для внесения изменений в MBR. Редактировать MBR не должно быть слишком сложно, так как эта небольшая программа довольно проста. Однако требуются некоторые навыки 16-битного (DOS) ассемблера. Другой способ - позволить grub запускать дополнительную полезную нагрузку и вообще не менять MBR, но я на 100% уверен, что это возможно; пожалуйста, обратитесь к руководствам Grub.

1
ответ дан 3 December 2019 в 01:02
поделиться

Думаю, вам лучше всего использовать Linux, в нем есть nasm для компиляции, dd для копирования кластера (что также означает MBR) и даже меню загрузчика ( lilo например), если вы не хотите возиться с вашими фактическими разделами.

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

LILO boot menu:
    -> WindowsXP
    -> linux

Я хотел сделать что-то отдельно с MBR, не влияя на фактическую установку, поэтому я создал новый (небольшой) раздел и добавил его в список LILO (опуская подробности здесь), который дал это :

LILO boot menu:
    -> WindowsXP
    -> linux
    -> TESTMBR

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

Чтобы фактически изменить эту MBR, я сделал следующее:

  1. Сделайте резервную копию фактической MBR, например dd if = / dev / sda3 of = / home / you / mbr − backup count = 1
  2. Отредактируйте код в файл: boot.asm
  3. Скомпилируйте с помощью nasm: nasm boot.asm -o boot.bin -f bin исправление ошибок
  4. Скопируйте только что созданную MBR на диск: dd if = boot.bin of = / dev / sda3
  5. Перезагрузка.
  6. Выберите в меню TESTMBR.
  7. Посмотри, как дела.

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

Что касается фактического выхода кода из MBR, вам необходимо использовать прерывание INT 13,42 , которое загружает любой кластер на диск. Для целей моего теста мне просто нужно было отобразить его содержимое, но я могу взглянуть поближе, если хотите.

Надеюсь, что это могло помочь, извините за длинный ответ.

2
ответ дан 3 December 2019 в 01:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: