2017-02-21 50 views
0

所以我试图在我的C程序中为main设置我自己的自定义名称,并且我找到了this答案。重写主程序的入口点的可能的缺点

您可以使用-e标志指定一个入口点到您的程序ld。 这意味着如果你喜欢,你可以重写入口点,但是你可能不想为你打算在你的机器上正常运行的C程序这么做,因为start可能会在你的程序运行之前做各种操作系统特定的东西。

什么是不是要求从crt0.o_start和写我自己的,还是只是因为无论我希望它的(可能)的缺点?

+3

如果未调用_start,则运行时未初始化,因此调用运行时提供的* any *函数可能未定义。 – EOF

+0

大概只有在交叉编译(开发),你想用自己的替换它。但是,那么你会想要用你自己的方式来覆盖整个运行时间和启动。 –

+1

在托管环境中,您不能在符合C程序的C语义入口点使用不同的名称。入口点名称和签名由语言定义。无论如何,如果可以的话,你不清楚自己有什么优势。 –

回答

1

入口点通常不会这样的东西

  • 准备参数并调用mainmain之前处理其exit
  • 呼叫global constructors和析构函数后
  • 填充全局变量,如environ之类
  • 初始化C运行时,例如timezonestdio流,这样
  • 也许configure x87使用80位浮点
  • 膨胀和零.bss如果您的装载机不
  • 其他任何需要托管C程序平台
上运行

这些东西与您的C实现紧密相连,所以通常只有当您定位freestanding environment时,您才提供自己的_start