あなたはCプログラム:__start
__start
が内部Cでどのように使用されるか私が理解するのに役立つことはできますか?
main
関数の正確なレプリカですか、それともコンパイルされたプログラムのエントリポイントですか?
ちょっと不思議なことに、その使い方は?
あなたはCプログラム:__start
__start
が内部Cでどのように使用されるか私が理解するのに役立つことはできますか?
main
関数の正確なレプリカですか、それともコンパイルされたプログラムのエントリポイントですか?
ちょっと不思議なことに、その使い方は?
は、プログラムの起動中に何が起こるかの概要です。の前には、main
の前に発生します。特に、__start
がであり、実際のエントリポイントがOSの観点からプログラムに表示されています。
これは、プログラム内でinstruction pointerのカウントが開始される最初のアドレスです。
そこコードは、物事をダウンさせるとmain
が返さどんな終了コードでexit
を呼び出して、あなたのmain
を呼び出し、そして、ほんの一部のハウスキーピングを行うには、いくつかのCランタイム・ライブラリ・ルーチンを呼び出します。
百聞は一見にしかずです:私たちのコンパイラは、メイン知っているよう
_startは...任意のプログラムのエントリポイントである、オペレーティングシステムの機能....です(mainはあらかじめ定義された関数ではなく、すべてのコンパイラがそれを知っています)この_start関数はmainを呼び出し、その時点からプログラムがCPUに入ります
私は、あなたが説明する必要がありますね! お試しいただきありがとうございます。 – San
C/C++標準では、main()
が出発点ですのプログラム。 GCCを使用している場合、_start
関数は、main()
を呼び出すCプログラムのエントリポイントです。 _start()
の主な仕事は、いくつかの初期化タスクを実行することです。
// $ gcc program_entry.c -nostartfiles
// $ ./a.out
// custom program entry
#include <stdio.h>
#include <stdlib.h>
void program_entry(void);
void
_start(void)
{
program_entry();
}
void
program_entry(void)
{
printf("custom program entry\n");
exit(0);
}
したい場合は、プログラムのエントリもGCCで-e
スイッチを指定してコンパイルすることができます。
// $ gcc program_entry.c -e __start
// $ ./a.out
// custom program entr
#include <stdio.h>
void program_entry(void);
void
_start(void)
{
program_entry();
}
void
program_entry(void)
{
printf("custom program entry\n");
}
状況を教えてください。 '__start'はどこで見たのですか? – NPE
** **はエントリーポイントです。 –