そのため、インターウェブを何週間も検索しましたが、質問に対する答えが見つかりません。
gcc によって追加された開始記号が最初の 2 つの引数 (int argc、char *argv[]) を設定していることがわかります。私は 3 番目の環境引数を信じていますが、これについていくつか質問があります。main() 関数が引数を持たないように定義されている場合、なぜこれらすべてを追加するのでしょうか? 引数なしで _main を呼び出すと、スペース (および技術的に処理時間) を節約できませんか? 次に $0x0 のプッシュは何をしますか? 私はテストを行いましたが、デフォルトの開始シンボルのようにコマンドライン引数を反復しようとすると、最初に $0x0 をプッシュする必要があります。そうしないと、次のようなことをするとスタック エラーが発生します。
push $0x00
call _main
mov %eax, %edi
call _exit
また、私の調査では、crt1.10.6.o にリンクすると、リンカーによって開始記号が追加されることがわかりました。
説明やドキュメントをいただければ幸いです