你能帮我理解一下吗
__start
在C内部使用?
它是main
函数的确切副本还是编译程序的入口点?
只是想知道它是如何被使用的?
答案 0 :(得分:13)
Here很好地概述了 main
之前程序启动期间发生的事情。特别是,从操作系统的角度来看,它表明__start
是您程序的实际入口点。
这是instruction pointer将在您的计划中开始计算的第一个地址。
那里的代码调用一些C运行时库例程只是为了做一些内务处理,然后调用你的main
,然后把事情搞定,并用返回的退出代码exit
调用main
。
一张图片胜过千言万语:
答案 1 :(得分:0)
_start是一个操作系统函数....它是任何程序的入口点...因为我们的编译器知道main(main不是预先定义的函数,它是用户定义的但是所有编译器都知道它们)这个_start函数将调用main,从那时起我们的程序进入CPU
答案 2 :(得分:0)
根据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");
}