В какой среде я могу писать двоичный код операционной системы?

Для изучения начальной загрузки операционных систем я провожу несколько простых тестов следующим образом:

  • Я устанавливаю oracle viratualbox и создаю жесткий диск

  • Я устанавливаю шестнадцатеричный редактор HxD и записываю код на этот жесткий диск, открывая файл, который представляет этот жесткий диск.

В конце первого 512-байтового сектора я записываю 55 AA в байтах 1FE и 1FF последовательно,

и другой код, который я пишу из первого байта первого сектора.

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

Я хочу использовать виртуальную машину или другую реальную машину (второй способ менее удобен), потому что он создает независимую среду разработки.

Как я могу более эффективно выполнять эти тесты для изучения начальной загрузки (и после простой разработки) операционной системы?


person jah    schedule 19.04.2015    source источник


Ответы (1)


Когда я занимаюсь такого рода разработкой, я создаю образ диска с нуля и указываю виртуальную машину на него как на дискету. Таким образом, выходной файл вашего ассемблера, объектный файл, может быть полным загрузочным сектором для дискеты, и вы можете легко загрузить дополнительные сектора по цепочке. Например:

;   x86 architecture systems all support MBR style boot sectors.  An
;   MBR boot sector must be 512 bytes in length and have machine
;   language code originating at 0000:7c00.  Additionally, it must
;   have the signature "0x55aa" as the final word in the sector or it
;   is not a valid boot sector.



org 0x7c00                  ; BIOS will load the MBR to this location 
                            ; and then jump here to continue execution

; Your code here!

                            ; As stated above, the boot sector must 
times   510-($-$$) db 0     ; Create padding to fill out to 510 bytes
dw      0xaa55              ; Magic number in the trailer of a boot sector
                            ; We write it as 0xaa55 because we're little
                            ; endian and it will be reversed to the required
                            ; 0x55 0xaa

Просто добавьте свой исходный код. Создайте ссылку на объектный файл с именем «floppy.img» или что-то в этом роде, а затем сообщите VirtualBox, где его найти. Вуаля!

Вы не спрашивали, но я надеюсь, что вы видите, что действительно можете поместить весь свой код в этот файл; просто добавьте код для последовательной загрузки из более поздних секторов после 0xaa55, и вы можете просто загрузить его в память, потому что вы знаете, что он попадает в начало следующего сектора.

person David Hoelzer    schedule 19.04.2015
comment
Если у вас возникнут проблемы, дайте мне знать. Я, конечно, могу опубликовать больше примеров кода, чтобы конкретизировать это. Но я не хотел отвлекаться от твоего веселья. :) - person David Hoelzer; 19.04.2015
comment
о, большое спасибо, теперь я попробую напечатать Hello, world на экране в начале mbr, я глубоко начат и теперь использую hiew32 для преобразования ассемблера в двоичный :) - person jah; 19.04.2015
comment
Я обнаружил fasm (flatassembler.net) - хороший способ преобразовать команды ассемблера в шестнадцатеричный, а также открыть для себя bochs (bochs.sourceforge.net) - эмулятор IA-32 - person jah; 27.04.2015