【问题标题】:C program: __start [duplicate]C程序:__start [重复]
【发布时间】:2013-04-10 07:16:43
【问题描述】:

你能帮我理解一下如何

__start

在C内部使用?

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

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

【问题讨论】:

  • 您能给我们一些背景信息吗?你在哪里看到__start
  • 入口点。

标签: c linux unix gcc


【解决方案1】:

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

这是instruction pointer 在您的程序中开始计数的第一个地址。

那里的代码调用一些 C 运行时库例程只是为了做一些内务处理,然后调用您的 main,然后关闭并使用返回的退出代码 main 调用 exit


一张图抵千言:

【讨论】:

  • 很棒的链接!!! +1,是否可以引用其中的主要内容,以防网站有一天会关闭,希望不会。
  • 万一文章在未来的某一天死掉——也许是 Wayback Machine might help
【解决方案2】:

根据 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");
}

【讨论】:

    【解决方案3】:

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

    【讨论】:

    • 我猜,你必须描述!感谢您试用。
    猜你喜欢
    • 1970-01-01
    • 2017-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多