逆向 | 《30天自制操作系统》读书笔记 | day1

《30天自制操作系统》读书笔记 | day1

很久之前就想弄了,今天才开始动手
因为我看是电子版,所以没有作者提供的工具,不过没关系,总能解决的

第一步,制作一个iso来启动电脑

这部分跟着书上的做就行了:
helloos.img(这个是启动文件,用16进制编辑器写就行了):

image
image
image

基本上就是以上三块东西,写好了以后用UltraIOS打包一个iso文件丢vmbox启动就好了(方便的一米,一次就成功):

image
image

完成!
好的开始呢!
冲!

接下来的部分就是用nasm去汇编编写上面的那个启动程序,说白了就是直接写机器码呗,书上用的那个nask可以直接用nasm代替,直接莽就可以了。

nasm -f bin helloos.asm

然后就能得到目标文件了~
所以最后的任务就是将上面直接编写的二进制文件改写成汇编:

; FAT12格式软盘专用的代码(并不理解啊哈哈)
DB 0xeb, 0x4e, 0x90
DB "HELLOIPL"         ; 启动区的名称可以是任意的字符串(8字节)
DW 512                ; 每个扇区(sector)的大小(必须为512字节)
DB 1                  ; 簇(cluster)的大小(必须为1个扇区)
DW 1                  ; FAT的起始位置(一般从第一个扇区开始)
DB 2                  ; FAT的个数(必须为2)
DW 224                ; 根目录的大小(一般设成224项)
DW 2880               ; 该磁盘的大小(必须是2880扇区)
DB 0xf0               ; 磁盘的种类(必须是0xf0)
DW 9                  ; FAT的长度(必须是9扇区)
DW 18                 ; 1个磁道(track)有几个扇区(必须是18)
DW 2                  ; 磁头数(必须是2)
DD 0                  ; 不使用分区,必须是0
DD 2880               ; 重写一次磁盘大小
DB 0,0,0x29           ; 意义不明,固定
DD 0xffffffff         ;(可能是)卷标号码
DB "HELLO-OS   "        ; 磁盘的名称(11字节)
DB "FAT12   "           ; 磁盘格式名称(8字节)
RESB 18               ; 先空出18字节

; 程序主体
DB 0xb8, 0x00, 0x00, 0x8e, 0xd0, 0xbc, 0x00, 0x7c
DB 0x8e, 0xd8, 0x8e, 0xc0, 0xbe, 0x74, 0x7c, 0x8a
DB 0x04, 0x83, 0xc6, 0x01, 0x3c, 0x00, 0x74, 0x09
DB 0xb4, 0x0e, 0xbb, 0x0f, 0x00, 0xcd, 0x10, 0xeb
DB 0xee, 0xf4, 0xeb, 0xfd

; 信息显示部分
DB 0x0a, 0x0a ; 2个换行
DB "hello, world"
DB 0x0a ; 换行
DB 0
       ;RESB 0x1fe-$ ; 填写0x00,直到 0x001fe
RESB 378         ; 上面一行的方法用不了 或者使用RESB	0x1fe-($-$$) 可以在nasm中编译通过
DB 0x55, 0xaa

; 以下是启动区以外部分的输出
DB 0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00
RESB 4600
DB 0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00
RESB 1469432

然后使用nasm编译,细心的话可以发现和之前的有一个字节的差别不过好像没有什么影响2333
哦还有,上面标出来了,有一行兼容性不太行,所以要微调一下。

补充:
如果是使用书上的方式使用qemu启动,其实就是配置一些参数,基本参数解释找到了一个比较好的文章:https://www.cnblogs.com/yucloud/p/10925938.html
image

ok,第一天的内容就到此结束了。

posted @ 2022-01-14 18:42  Mz1  阅读(81)  评论(0编辑  收藏  举报