最小の実行ファイルを生成する
最小の実行ファイルを眺めてみることでバイナリを完全に理解した
Linuxにはelf.hという便利ヘッダが付属している
これを使えば実行ファイルを扱えるよ!やったね!
man elfを読めば更に完全に理解ができて便利
偉大なる先人が記事を書いてくださっているので参考にしつつ進めていく
Wikipediaの記事も参考になる
大半はひたすら埋めるだけ
ローダーが見ているのがプログラムヘッダー、リンカーやデバッガが見ているのがセクションヘッダー
なので実行ファイル作るだけならセクションヘッダーいらない
資料
ヘッダーの構造見ていたらどうして機械語が0x1000か始まるのか理解してきた
プログラムヘッダーに埋め込む情報の計算が面倒
プログラムヘッダーの直後に埋めるとヘッダー数でオフセットがずれる
リンカーの動作も理解してきた
これが動かせればスタティックバイナリ吐くリンカーくらいなら作れるのでは
プログラムヘッダーのp_align周りが難しい
p_offsetとp_vaddrがp_alignを法として合同である必要がある、そうじゃないとSEGVする
プログラムで書くならp_offset mod p_align == p_vaddr mod p_align
理由は後で調べる
ページサイズでアラインしてないとだめなの、mmapしてるからではないのか
確かmmapはアラインしてないと失敗する
適当に書いたら動いた
めっちゃ楽しい
これで一歩先に進める
e_entryが0x10000未満だとSEGVする
何故?後で調べる