最近阅读了一本书《高级C/C++编程技术》,发现都是非常有用的知识,对于初学者提升能力是非常有帮助的,更容易理解编译过程,这儿讲解一下main函数执行之前做了哪些准备。
main()函数之前,会先执行一些函数,这些函数有什么作用呢?
既然在main()函数之前执行,那肯定是对程序的运行做准备。这个应该都能想到。
这儿用两个函数作简单讲解:
①_start()函数:主要目的是为接下来调用的_libc_start_main()函数准备入参。
②_libc_start_main()函数:
原型:
int __libc_start_main(int (*main) (int, char * *, char * *), /* address of main function */
int argc, /* number of command line args */
char * * ubp_av, /* command line arg array */
void (*init) (void), /* address of init function */
void (*fini) (void), /* address of fini function */
void (*rtld_fini) (void), /* address of dynamic linker fini function */
void (* stack_end) /* end of the stack address */
);
从①知道_start()函数是准备参数,然后在调用此函数,那么_libc_start_main()函数会做哪些动作呢?
a.为程序设置好运行环境;
b.启动程序的线程;
c.调用_init()函数,做一些必要的初始化操作,gcc编译器利用_attribute_(constructor)关键字对程序启动前的自定义操作提供支持;
d,注册_fini() 和 rtld_fini()函数,程序终止时调用。
执行_libc_start_main()函数完成后,就开始调用main(),启动程序。
希望能对一些初学者有所帮助。加油!