C程序:__ start

时间:2013-04-10 07:16:43

标签: c linux unix gcc

你能帮我理解一下吗

__start

在C内部使用?

它是main函数的确切副本还是编译程序的入口点?

只是想知道它是如何被使用的?

3 个答案:

答案 0 :(得分:13)

Here很好地概述了 main之前程序启动期间发生的事情。特别是,从操作系统的角度来看,它表明__start 是您程序的实际入口点

这是instruction pointer将在您的计划中开始计算的第一个地址。

那里的代码调用一些C运行时库例程只是为了做一些内务处理,然后调用你的main,然后把事情搞定,并用返回的退出代码exit调用main


一张图片胜过千言万语:

C runtime startup diagram

答案 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");
}