如何在空的虚拟机(VirtualBox,VMware)实例中运行汇编代码?
我想尝试编写一个简单的引导程序。我的目标是为业余操作系统工作。
如何在空的虚拟机(VirtualBox,VMware)实例中运行汇编代码?
我想尝试编写一个简单的引导程序。我的目标是为业余操作系统工作。
你需要在虚拟硬盘上写入正确的主引导记录。为此,一个必须学习启动过程的确切工作方式以及代码在哪些地址执行。这里没有足够的空间来写所有的细节,但有许多网页描述了它们。简而言之,在初始引导后(自检),BIOS搜索存储设备,直到找到一个包含第一个扇区的最后两个字节为小端字 AA55h(MBR引导标记)的设备。然后BIOS将可引导设备的引导扇区加载到地址0000h:7C00h(请注意,所有这些都是在实际的x86模式下完成的),并将执行转移到引导代码。 MBR仅支持512字节的空间限制,因此通常会将引导转发到下一阶段,即使用MBR中的小代码从磁盘的某处加载另一个引导代码到内存中,然后将执行转移到那里。从虚拟软盘启动可能略有不同。在现代系统中,MBR被GPT所取代。正如你所看到的,这里涉及到许多事情,尽管它们不像看起来那么困难。
在虚拟机中编写引导扇区与在实际机器上编写一样。您需要创建一个启动盘,它将在目标驱动器上安装您的引导加载程序。因此,您基本上需要执行以下步骤:
1. Write a bootloader and put it in an imagefile. (http://wiki.osdev.org/Babystep1)
2. create a boot disc, which will put the image into the bootsecotr of your target harddisc (This can be a simple DOS disk or a linux environment, hwatever. (http://wiki.osdev.org/Bootable_CD)
3. boot from the loader in your environment.
查看我在上面第一条评论中发布的链接,应该能详细说明所有这些问题。