Какие инструкции по сборке находятся в основной загрузочной записи?

Любопытно, какие явные инструкции по сборке на самом деле составляют основную загрузочную запись в архитектуре X86. Спасибо за любые идеи.

Другие архитектуры приветствуются, но это в первую очередь для X86.


person iokevins    schedule 26.01.2010    source источник


Ответы (4)


Посмотрите здесь разобранный MBR-загрузчик из stage1 в grub1: http://thestarman.pcministry.com/asm/mbr/GRUB.htm

person Leonidas    schedule 26.01.2010

Основная загрузочная запись состоит из 512 байтов, последние два байта должны иметь значение 0x55 0xAA. Осталось 510 байт, записи в таблице разделов составляют 16 байт, максимум 4 записи в таблице разделов, что составляет 64 байта. Вот выглядит запись раздела.

Осталось 446 байт ассемблерного кода. Обычно первые несколько байтов состоят из записи идентификатора загрузки, описывающей данные диска загрузчика, такие как идентификатор, идентификатор системы и т. д., затем BIOS ожидает загрузочный код по адресу 0x000:0x07C00, затем он перемещается ниже вниз в сегменте памяти. См. здесь пример руководства по загрузчикам. На WikiBooks есть подробный технический обзор здесь.

Единственное, с чем вы должны быть осторожны, это то, что код загрузчика не должен превышать 446 байт, иначе таблицы разделов будут повреждены и, следовательно, сообщение об ошибке BIOS «Error. Отсутствует операционная система или что-то подобное!

Запись скомпилированного бинарного файла загрузочного сектора на диск обычно связана с грязным и опасным способом облажаться с компьютером, в Linux команда будет похожа на:

# Assume that /dev/hda1 is the first hard disk then...
dd if=mybootldr.bin of=/dev/hda1 bs=512 cnt=1

Другой способ заключается в использовании низкоуровневого редактора дисков или даже в использовании старого доброго DEBUG.EXE (найденного на старых дискетах MSDOS) или даже в использовании FreeDos.

C:\DEBUG.EXE mybootldr.bin 
-W 100 0 0 1 
-Q

Насколько я помню, DR.DOS (Digital Research DOS), конкурент MS-DOS, использовала защиту паролем в коде загрузчика перед загрузкой DR-DOS.

Редактировать: Если вам действительно интересно, как выглядит BIOS для 0x0000:0x7C00, взгляните на эту ссылку, по которой вы можете загрузить исходный код BIOS IBM XT здесь.

Надеюсь, это поможет. С уважением, Том.

person t0mm13b    schedule 26.01.2010
comment
@Stacker: что ты имеешь в виду ... Я голосую за твой ответ;) если ты это имеешь в виду .... :) - person t0mm13b; 27.01.2010
comment
Это фантастическое сочинение. Спасибо Tommieb75! :) - person iokevins; 27.01.2010

Люблю эти старые школьные темы ;-)

вот два ассемблера списков, потому что вы просите explicit assembly instructions

person stacker    schedule 26.01.2010
comment
Эти старые школьные темы никогда не надоедают! ;) - person t0mm13b; 27.01.2010

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

person Thomas Pornin    schedule 26.01.2010