8

你能帮我理解如何

__start

在 C 内部使用?

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

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

4

3 回答 3

17

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

它是程序中指令指针开始计数的第一个地址。

那里的代码调用一些 C 运行时库例程只是为了做一些家务,然后调用你的main,然后把事情放下,并exit用返回的任何退出代码调用main


一张图片胜过千言万语:

C运行时启动图

于 2013-04-10T07:25:11.417 回答
2

根据 C/C++ 标准,main()是程序的起点。如果您使用 GCC,_start函数是 C 程序的入口点,它调用main(). 函数的主要工作_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);
}

如果需要,也可以-e在 GCC 中使用 switch 编译程序入口。

// $ 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");
}
于 2017-12-14T03:14:39.487 回答
-1

_start 是一个操作系统函数......它是任何程序的入口点......因为我们的编译器知道 main(main 不是预定义函数,它是用户定义的,但所有编译器都知道它们)这个 _start 函数将调用main ,然后我们的程序进入 CPU

于 2013-04-16T09:01:54.013 回答