exec実装

execが実装できた(かなり適当なものだけど)
そのためにやったことは

  1. まずelf形式ファイルの扱い型の勉強
  2. リンカスクリプトを書いて、自作OSのメモリマップに合わせる
  3. elfヘッダの指示どおりのアドレスに実行ファイルの内容を読み込む
  4. エントリポイントへジャンプ

自作OSのメモリマップはLinuxとは違い1GB(0x40000000)からユーザ空間としている。
実装に関して工夫はないが、実行ファイルを読めるだけでもうれしい(笑
(リンカスクリプト)

SECTIONS{
    . = 0x40000000;

    .rodata ALIGN (0x1000) : {
        *(.rodata)
    }

    .data ALIGN (0x1000) : {
        *(.data)
    }

    .bss : {
        sbss = .;
        *(COMMON)
        *(.bss)
        ebss = .;
    }
	.data ALIGN (0x1000) : {
   	start_ctors = .;
   	*(.ctor*)
   	end_ctors = .;
   	start_dtors = .;
   	*(.dtor*)
   	end_dtors = .;
   	*(.data)
	}
   .text :{
        *(.text)
    }
}