打印" Hello world"在C中的main()函数之前

时间:2017-10-14 09:01:31

标签: c gcc segmentation-fault main startup

以下程序从Quora复制,在"Hello world"功能之前打印main()

#include <stdio.h>
#include <unistd.h>

int main(void)
{
  return 0;
}

void _start(void)
{
  printf ("hello, world\n");
  int ret = main();
  _exit (ret);
}

然后,我使用以下命令

在Ubuntu-14.04 GCC编译器上编译了上述程序
gcc -nostartfiles hello.c

并运行a.out可执行文件,但我得到了Segmentation fault (core dumped)?那么,为什么分段错误

1 个答案:

答案 0 :(得分:6)

0.0 20.0 15.0 0.5 0.03 0.1 0.0 是可执行文件的真正入口点,通常由C运行时用来初始化它的东西 - 包括stdio - ,用_start属性标记的调用函数然后调用你的{{ 1}}入口点。如果你接受它并尝试使用标准库中的东西(例如constructor),你就会生活危险,因为你正在使用尚未初始化的东西。

可以完全绕过C运行时,并使用直接系统调用打印,例如main