【備忘】ゼロからのOS自作入門

OS作り始めました

OSを作りたい季節が来ました。備忘録を残すことで知識の定着をはかりたいと思います。思い付いたら随時追記予定。

検証環境

QEMU emulator version 5.2.0

LLD 9.0.1 (compatible with GNU linkers)

第3章 画面表示の練習とブートローダ

3.3 初めてのカーネル

エントリポイントアドレス

 64bitの場合、オフセット24byteの位置から8byteの整数

ELFHeaderの構造

typedef struct {
        unsigned char   e_ident[EI_NIDENT];
        Elf64_Half      e_type;
        Elf64_Half      e_machine;
        Elf64_Word      e_version;
        Elf64_Addr      e_entry;
        Elf64_Off       e_phoff;
        Elf64_Off       e_shoff;
        Elf64_Word      e_flags;
        Elf64_Half      e_ehsize;
        Elf64_Half      e_phentsize;
        Elf64_Half      e_phnum;
        Elf64_Half      e_shentsize;
        Elf64_Half      e_shnum;
        Elf64_Half      e_shstrndx;
} Elf64_Ehdr;

オフセット計算 24byte(16+2+2+4)

 unsigned char e_ident[EI_NIDENT] 16byte

 Elf64_Half 2byte

 Elf64_Half 2byte

 Elf64_Word 4byte

 ※unsigned charが1byteでEI_NIDENTが16の為

コラム3.1 レッドゾーン

VAMD64 ABIのレッドゾーンはRSPの手前128byteの領域

https://software.intel.com/content/dam/develop/external/us/en/documents/mpx-linux64-abi.pdf

P.17に記載

3.7 ポインタ入門(2):ポインタとアセンブリ言語

トレースしてみました。

※自分の認識なので間違ってる可能性あり

ソースはこれ

アセンブリの解釈がこちら。区切りのいい数行ずつで確認してみました。

RBPの値推移がどうにも間違ってる気がしますが、、、実機でトレースしてみろって話ですね;w

参考文献

ゼロからのOS自作入門(最新の文献 URL) http://zero.osdev.jp/ref-latest.html

Mac で始める「ゼロからのOS自作入門」 - Qiita
Mac で「ゼロからのOS自作入門」の「8.7 メモリ管理に挑戦」まで進められたので、ひとまずそこまでの手順をメモとして残しておきます。この環境構築方法で本の最後まで進められるかどうかはまだわかりま…
MacでゼロからのOS自作入門をゼロから勉強中
「ゼロからのOS自作入門」の副読本的記事
「ゼロからのOS自作入門」 03日目 | あしたからがんばる
「ゼロからのOS自作入門」 を勉強したときのメモ。
System V Application Binary Interface - DRAFT

https://software.intel.com/content/dam/develop/external/us/en/documents/mpx-linux64-abi.pdf

コメント