__attribute __((constructor))如何更改入口点?

时间:2018-09-06 11:19:15

标签: c gcc compilation

从C编程语言的角度来看,我知道 main()是程序的入口点。

但是从操作系统的角度来看,__startctrt0处的启动例程,这些例程被链接到一个程序中,该程序执行调用程序的main()函数之前所需的任何初始化工作(如果这里有错,请纠正我。)

所以我们有一些可以用于功能的属性,其中之一是 在main()之前调用的构造方法属性,谁负责调用此函数?

__attribute__((construtor))
void foo(void)
{
        puts("Constructor called by ... ?\n");
}

以及它在逐步调用堆栈中的外观如何?谢谢!

1 个答案:

答案 0 :(得分:2)

标记为“构造函数”的功能放在可执行文件的特殊部分中。然后,“开始”功能将在调用main之前逐个调用这些功能。

与“析构函数”函数相同,它们再次放置在特殊部分中,并由调用exit或返回main之后执行的代码调用。