OS作り始めました
OSを作りたい季節が来ました。備忘録を残すことで知識の定着をはかりたいと思います。思い付いたら随時追記予定。
検証環境
QEMU emulator version 5.2.0
LLD 9.0.1 (compatible with GNU linkers)
第3章 画面表示の練習とブートローダ
3.3 初めてのカーネル
エントリポイントアドレス
64bitの場合、オフセット24byteの位置から8byteの整数
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
コメント