__attribute __((构造函数))如何更改入口点?

问题描述 投票:1回答:1

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

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

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

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

它将如何逐步调用堆栈?谢谢!

c gcc compilation
1个回答
2
投票

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

与“析构函数”函数相同,它们再次放在一个特殊的部分中,并在调用exitmain返回后执行的代码调用。

© www.soinside.com 2019 - 2024. All rights reserved.