在空的虚拟机实例中运行汇编代码?

11

如何在空的虚拟机(VirtualBox,VMware)实例中运行汇编代码?

我想尝试编写一个简单的引导程序。我的目标是为业余操作系统工作。


1
由于这个问题比较广泛,您可能需要考虑查看这里:http://wiki.osdev.org/Tutorials - Devolus
不会比真正的机器差。 - old_timer
虽然这个问题特别询问了VirtualBox,但值得注意的是,QEMU可以轻松运行由像NASM这样的汇编器生成的.bin文件。 - user1086516
2个回答

12

你需要在虚拟硬盘上写入正确的主引导记录。为此,一个必须学习启动过程的确切工作方式以及代码在哪些地址执行。这里没有足够的空间来写所有的细节,但有许多网页描述了它们。简而言之,在初始引导后(自检),BIOS搜索存储设备,直到找到一个包含第一个扇区的最后两个字节为小端字 AA55h(MBR引导标记)的设备。然后BIOS将可引导设备的引导扇区加载到地址0000h:7C00h(请注意,所有这些都是在实际的x86模式下完成的),并将执行转移到引导代码。 MBR仅支持512字节的空间限制,因此通常会将引导转发到下一阶段,即使用MBR中的小代码从磁盘的某处加载另一个引导代码到内存中,然后将执行转移到那里。从虚拟软盘启动可能略有不同。在现代系统中,MBR被GPT所取代。正如你所看到的,这里涉及到许多事情,尽管它们不像看起来那么困难。


首先,感谢您的回答。我知道编写引导程序是一个广泛的问题。我只是想问一下,在一个空的虚拟盒子里开始编写是否可能? - tolga
好的,我想要更加详细地说明一下 :) 为了编写任何内容,您需要一个文本编辑器和支持该编辑器的基础设施。这些在空的虚拟机中是不存在的。 - Igor Popov

10

在虚拟机中编写引导扇区与在实际机器上编写一样。您需要创建一个启动盘,它将在目标驱动器上安装您的引导加载程序。因此,您基本上需要执行以下步骤:

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.

查看我在上面第一条评论中发布的链接,应该能详细说明所有这些问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接