main() なしで動くCプログラムを書く:コンパイルパイプラインの旅
Writing a (valid) C program without main()

C言語のコンパイルパイプライン(プリプロセッサ、コンパイラ、アセンブラ、リンカ)を順にたどり、通常のHello Worldから始めて、最終的にmain()関数を持たない実行可能バイナリを生成する。カスタムの_startエントリポイントを定義し、glibcに依存せずに生のsyscall(writeとexit)を直接呼び出すことで、有効なELF実行ファイルを作り出す。この過程で、main()は単なる慣習であり、実際のエントリポイントは_startであること、またprintfが動作するにはCランタイムの初期化が必要であることを学ぶ。
main() は便宜上のものであり、必須ではありません。実際のエントリポイントは _start であり、標準Cランタイムは main() を呼び出すコードです。