リンカ・ローダと実行形式
C言語のプログラムで、OSが最初に実行を始める番地(エントリポイント)について正しいものはどれか。
- A必ずmain関数の先頭である
- B実行ファイルの先頭のバイトと決まっている
- C通常はmainではなく_startなどの起動用のコードで、初期化をしてからmainを呼ぶ
答えと解説を見る
正解:C. 通常はmainではなく_startなどの起動用のコードで、初期化をしてからmainを呼ぶ
リンカは、Cのランタイムが用意する起動用のオブジェクト(crt1.oなど)をプログラムに組み込み、その中の_startを入口にします。_startは、スタックからコマンドライン引数を取り出し、標準ライブラリやグローバルなオブジェクトの初期化を行ってからmainを呼びます。mainが戻ると、その戻り値を使ってexitを呼び、終了の処理をします。
- A. mainの前に準備の処理が動きます。
- B. 入口の番地はELFヘッダに記録されます。
- C. 正しい。Cのランタイムが用意する起動コードです。