0171-創(chuàng)建內(nèi)核可執(zhí)行文件
2023-08-18 10:53 作者:jiangbo4444 | 我要投稿
環(huán)境
Time 2022-11-11
WSL-Ubuntu 22.04
QEMU 6.2.0
NASM 2.15.05
前言
說(shuō)明
參考:https://os.phil-opp.com/multiboot-kernel/
目標(biāo)
編寫一個(gè)可以加載執(zhí)行的文件。
啟動(dòng)代碼
start 是啟動(dòng)入口,.text 表示是代碼段。
bits 32 指定了編譯成 32 位的機(jī)器碼,因?yàn)樾枰?32 位保護(hù)模式下執(zhí)行。
0xb8000 是顯存地址,輸出使用。
hlt 是 CPU 停機(jī)指令。
編譯和反編譯
創(chuàng)建 ELF 文件
ELF 主要是 linux 系統(tǒng)下的一種文件格式。
nasm 默認(rèn)輸出二進(jìn)制文件,需要 ELF 文件,需要增加參數(shù) -f 指定,得到兩個(gè) .o 文件(對(duì)象文件)。
鏈接對(duì)象文件
自定義鏈接腳本
start 指定的程序入口。
. = 1M 指定了程序需要被加載到哪個(gè)地址上。
.boot 放到最開始,后面是 .text 段。
multiboot_header 放到最前面。
鏈接
-n 不可以省略,關(guān)閉對(duì)齊。
查看 section 信息
總結(jié)
創(chuàng)建了一個(gè)內(nèi)核可執(zhí)行程序 kernel.bin。
附錄
標(biāo)簽: