利用virtualBox虚拟机来模拟操作系统运行过程,主要使用工具
1.virtualBox
2.Ubuntu
在windows上安装virtualBox
https://www.virtualbox.org/wiki/Downloads
在virtualBox上安装ubuntu操作系统
https://ubuntu.com/download 可以下载最新桌面版Ubuntu 19.10
https://blog.csdn.net/scene_2015/article/details/83025750
设置ubuntu操作系统
安装基本工具 vim nasm hexedit
1.窗口分辨率调整
https://blog.csdn.net/swingboard/article/details/49967239
2.安装搜狗输入法
https://www.cnblogs.com/zhuangmingnan/p/9496499.html
3.查看二进制文件
安装hexedit sudo apt-get install hexedit
使用vim。先用vim -b file打开文件。然后输入:%!xxd命令转换为十六进制。输入:%!xxd -r返回原显示文件
4.主机与虚拟机文件共享
https://blog.csdn.net/hi_bigguy/article/details/79691309
实现OS hello world
新建一个汇编文件boot.asm 实现如下:
org 0x7c00
jmp entry
db 0x90
DB "OSKERNEL"
DW 512
DB 1
DW 1
DB 2
DW 224
DW 2880
DB 0xf0
DW 9
DW 18
DW 2
DD 0
DD 2880
DB 0,0,0x29
DD 0xFFFFFFFF
DB "MYFIRSTOS "
DB "FAT12 "
RESB 18
entry:
mov ax, 0
mov ss, ax
mov ds, ax
mov es, ax
mov si, msg
putloop:
mov al, [si]
add si, 1
cmp al, 0
je fin
mov ah, 0x0e
mov bx, 15
int 0x10
jmp putloop
fin:
HLT
jmp fin
msg:
DB 0x0a, 0x0a
db "hello, world"
db 0x0a
db 0
TIMES 0x1fe-($-$$) DB 0x00
DB 0x00, 0x00
执行汇编命令nasm
nasm boot.asm -o boot.img
可以利用hexedit查看boot.img文件如下:
00000000 EB 4E 90 4F 53 4B 45 52 4E 45 4C 00 02 01 01 00 02 E0 00 40 0B F0 09 00 12 00 02 00 .N.OSKERNEL........@........
0000001C 00 00 00 00 40 0B 00 00 00 00 29 FF FF FF FF 4D 59 46 49 52 53 54 4F 53 20 20 46 41 ....@.....)....MYFIRSTOS FA
00000038 54 31 32 20 20 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 B8 00 00 8E T12 ......................
00000054 D0 8E D8 8E C0 BE 71 7C 8A 04 83 C6 01 3C 00 74 09 B4 0E BB 0F 00 CD 10 EB EE F4 EB ......q|.....<.t............
00000070 FD 0A 0A 68 65 6C 6C 6F 2C 20 77 6F 72 6C 64 35 35 32 0A 00 00 00 00 00 00 00 00 00 ...hello, world552..........
0000008C 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............................
000000A8 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............................
000000C4 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............................
000000E0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............................
000000FC 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............................
00000118 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............................
00000134 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............................
00000150 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............................
0000016C 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............................
00000188 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............................
000001A4 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............................
000001C0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............................
000001DC 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ............................
000001F8 00 00 00 00 00 00 00
利用virtualBox新建一个windows64位操作系统,设置从软盘启动,软盘文件选择boot.img
最终结果运行如下:
至此hello world实现完成,这里模拟一张软盘,将汇编代码写在第一个扇区,然后启动虚拟机由程序来执行,FAT12格式的软盘有特定格式,这里经过试验发现只要保证生成的软盘文件至少有512字节即可,可能与虚拟机加载软盘与实际物理机不同有关,参考其他资料,软盘大小应为1440KB,并且引导扇区最后字节应为0x55AA,这里可能与虚拟机实现机制有关,并不需要严格的软盘格式,后面继续研究主要研究一下上面代码含义以及软盘加载读写机制。