引导扇区的实现

第一次编写,参考别人的实现了下。

实验环境及工具

  • ubuntu 14.0
  • nasm

思路:

  • 写一段汇编代码,输出 Hello, World
  • 将该段代码写入软盘镜像的第一个扇区
  • 安装virtualbox创建一个操作系统,从软盘镜像引导,查看结果

引导区代码

 1  ;; BIOS会把512字节的引导扇区加载到 0000:7c00 处,
 2     ;; 然后跳转到0000:7c00处,将控制权交给引导代码。
 3     org 07c00h                  ;这一行告诉编译器,我们的代码将被加载到7c00处。
 4     mov ax, cs                  ;将代码段寄存器的值送入AX
 5     mov ds, ax                  ;将数据段的地址置为代码段的地址?
 6     mov es, ax                  ;将附加段的地址置为代码段的地址?
 7     call  DispStr               ;调用显示字符串例程
 8     jmp $                       ;无限循环, $表示当前行编译后的地址
 9     ;; 以上就是整个程序的执行过程了
10     ;; 下面是DispStr子程序
11 DispStr:
12     mov ax, BootMessage         ;将字符串首地址传给寄存器ax
13     mov bp, ax                  ;CPU将用ES:BP来寻址字符串
14     mov cx, 16                  ;通过CX,CPU知道字符串的长度
15     mov ax, 01301h              ;AH=13表示13号中断, AL=01H,表示目标字符串仅仅包含字符,属性在BL中包含,移动光标
16     mov bx, 000ch               ;黑底红字, BL=0CH,高亮
17     mov dl, 0                   ;dh表示在第几行显示,dl表示第几列显示
18     int 10h                     ;BIOS的10H中断的13号中断用于显示字符串
19     ret
20 BootMessage:    db "Hello, OS world!" ;对NASM来讲,标号和变量的作用一样, db表示define byte
21     ;; $当前行被汇编后的地址,$$表示一个section开始处的地址,本程序只有一个section,所以指0x7c00
22     times 510-($-$$) db 0           ;填充剩下空间,使生成的二进制恰好为512字节
23     dw 0xaa55                       ;结束标志,如果发现扇区以0xAA55结束,则BIOS认为它是一个引导扇区,dw表示define word

编译生成二进制

需要nasm

编译我们的扇区代码生成二进制:

nasm boot.asm -o boot.bin

写入软盘的第一个扇区

我们用软盘镜像来模拟软盘。

dd if=/dev/zero of=emptydisk.img bs=512 count=2880 #生成空白软盘镜像文件
dd if=boot.bin of=boot.img bs=512 count=1 #用 bin file 生成对应的镜像文件
dd if=emptydisk.img of=boot.img skip=1 seek=1 bs=512 count=2879 #在 bin 生成的镜像文件后补上空白,成为合适大小的软盘镜像

这样,我们引导系统用的虚拟软盘就准备好了。

安装virtualbox,建立系统

可以直接从Linux软件仓库安装virtualbox。

安装程序会创建 vboxusers 用户组,并编译所需的内核模块。现在,你还不能启动 VirtualBox,因为你的当前用户还不属于 vboxusers 用户组。你可以使用下面的指令来将当前的用户添加到 vboxusers 用户组中:

sudo adduser username vboxusers

把上面的username改为当前用户的名字。

启动virtualbox(直接输入virtualbox)。

可能提示vboxdrv未能成功加载。如果发生这种情况,需要重新编译vboxdrv模块。安装linux-headersdkms,然后sudo dkms autoinstall就会编译生成vboxdrv模块。

手动执行sudo modprobe vboxdrv加载vboxdrv模块,启动virtualbox应该不会有问题了。

建立一个虚拟机,有没有硬盘都可以,增加一个软驱,把我们的boot.img加载到软驱中,启动虚拟机,成功的话,可以看到:

virtualbox可能出现的问题:

  1. Failed to open a session for the virtual machine a. Failed to load VMMR0.r0 (VERR_SUPLIB_OWNER_NOT_ROOT). Unknown error creating VM (VERR_SUPLIB_OWNER_NOT_ROOT). 解决方法:sudo chown -R root:root /usr/lib/virtualbox
  2. Effective UID is not root. 解决方法: sudo chmod 4711 /usr/lib/virtualbox/VirtualBox
时间: 2024-11-07 10:35:31

引导扇区的实现的相关文章

编写主引导扇区代码

一. 读取的主引导扇区数据有512字节,ROM-BIOS程序将它加载到逻辑地址0x0000:0x7c00处. 一个有效的主引导扇区,最后两个字节应当是 0x55 和 0xAA. 二.注释 汇编注释 三.在屏幕上显示文字 显卡和显存 计算机在加电自检之后会初始化到80X25的文本模式. 0xB8000--0xBFFFF这段物理地址是留给显卡的. 初始化段寄存器 <span style="white-space: pre;"> </span><span sty

Linux0.12内核学习之(1)——用MASM编写Boot Sector引导扇区

最近在学习Linux0.12内核,正在读<Linux内核完全剖析>.一开始就被ax86写的引导扇区弄晕了.于是Google了很多资料.最终实验了一晚上终于搞定.下面来看看我们怎么用Windows下的MASM来写个Boot Sector.因为我MASM汇编用的比较熟,所以就用MASM来写,当然,汇编只有语法差异,你用什么来写都没关系. 首先,先来说说计算机怎么启动的.经过一系列BIOS加电.系统自检后,会将硬盘0面0道1扇区的512字节(Boot Sector)加载到内存地址07c0:0000处

主引导扇区MBR的解析

http://blog.chinaunix.net/uid-24774106-id-3340397.html 最近排查一个USB相关的故障,由于信息安全就不多说工作上的事情了,顺路学习了MBR的相关知识,在网上找了一些资料,现在把学习心得写下来,抛砖引玉.感谢无数前辈的分享精神. 我的U盘插入linux后被识别成了sdb4,我当时很纳闷,为什么是4,没有sdb1 sdb2 sdb3,直接就sdb4 了.linux是从哪里显示的这个4.     是这样的,sdb,这个b是有linux 动态分配的,

【转载】FAT12文件系统之引导扇区结构

FAT12文件系统之引导扇区结构 文件系统即文件管理系统,是操作系统的重要组成部分之一,如果需要开发底层磁盘驱动或编写自己的操作系统,就必须详细了解文件系统. FAT12是Microsoft公司DOS操作系统所支持的文件系统之一,此外还有FAT16和FAT32,之后会分别详述这些文件系统.当软盘被标准格式化后,磁盘被格式化为:每磁头80个柱面(磁道),每个柱面有18个扇区,每个扇区有512字节空间.所以标准软盘的总空间(容量)为: 2*80*18*512=1474560B=1440K=1.44M

精品软件 推荐 Bootice(引导扇区维护工具)

BOOTICE- 引导扇区维护工具,BOOTICE 是一个启动相关的维护的小工具,主要用于安装.修复.备份和恢复磁盘(镜像)的 MBR(Master Boot Record)或分区 PBR(Partition Boot Record),以及查看编辑 Windows Vista/7/8/8.1 的 BCD.此外还具有磁盘扇区编辑.磁盘填充.分区管理等等功能. 功能介绍 ★ BOOTICE 能为你的磁盘安装如下类型的 MBR: 1.Wee.不点大师开发的 mini-g4d,支持一定功能的同时减小了体

MBR主引导扇区解析

最近在制作镜像的时候由于需要简单研究了下MBR主引导扇区的结构,这里记录下便于后期温习,下面就直接进入正题: MBR主引导扇区位于磁盘的第一个扇区,即0号扇区,主要由引导代码.分区表.结束标志三部分构成,总共占512字节. 下面首先看下MBR主引导扇区的整体结构图: 1.引导代码 上图中黄色框内的部分即为引导程序,占扇区前446字节.计算机在上电完成BIOS自检后,会将该主引导扇区加载到内存中并执行前面446字节的引导程序,引导程序首先会在分区表中查找活动分区,若存在活动分区,则根据活动分区的偏

主引导扇区的理解

什么是主引导扇区? master boot record 它是硬盘上的第一个扇区,由硬盘厂商就预留了.一个扇区的大小通常是512个字节.主引导扇区,不依赖于具体的操作系统,也就是说主引导扇区可以启动任何一种操作系统. 它的作用是什么?里面存储了什么信息?里面存储的是硬盘的基本信息,包括硬盘分成几个区,每个区的大小,每个区从什么位置开始,从什么位置结束. 里面的数据是怎么写入进去的,通过工具.任何操作系统平台上的工具都可以写入进去. 疑问:一块新的硬盘,第一个扇区的内容是不是由厂商就写好数据进去了

[转]硬盘的那些事(主分区、扩展分区、逻辑分区、活动分区、系统分区、启动分区、引导扇区、MBR等)

http://xu3stones.blog.163.com/blog/static/205957136201210309424303 主分区,扩展分区,逻辑分区,活动分区,系统分区,启动分区.........主引导扇区,MBR,bootloader..........各种概念,你都清楚什么意思吗?花了一天的时间终于研究清楚了,网上好多帖子的解释都是错的,或者没有深入到本质,都是什么C盘啊,D盘啊,都被windows洗脑了.浪费了好好长时间. 主分区:实际上在早期的硬盘分区中并没有主分区.扩展分区

硬盘主引导扇区引导程序

硬盘主引导扇区的引导程序只占139个字节(不同版本的Fdisk.不同的分区程序写入的主引导记录会不相同,但其基本功能一样),经过反汇编后的引导程序的汇编代码如下: 1000:0600 FA CLI ;自举,将0000:7C00开始的硬盘主引导记录本身转移到0000:0600处,空出0000:7C00开始的空间给将读入活动分区的操作系统的引导扇区 1000:0601 33C0 XOR AX,AX 1000:0603 8ED0 MOV SS,AX 1000:0605 BC007C MOV SP,7C