C 用特殊函数_init和_fini分割故障
出于观察的目的,我使用_start(),_init(),_fini()编写了一个程序,目标是不使用startfiles。 代码如下C 用特殊函数_init和_fini分割故障,c,gcc,compilation,init,C,Gcc,Compilation,Init,出于观察的目的,我使用_start(),_init(),_fini()编写了一个程序,目标是不使用startfiles。 代码如下 #include <stdio.h> void test() { printf("\n%s: \n",__func__); printf("library test routine invoked\n"); int a=3,b=2; int sum=a+b; printf("sum=%d\n",sum); getchar(); _fini(); } i
#include <stdio.h>
void test()
{
printf("\n%s: \n",__func__);
printf("library test routine invoked\n");
int a=3,b=2;
int sum=a+b;
printf("sum=%d\n",sum);
getchar();
_fini();
}
int _start()
{
printf("\n%s: \n",__func__);
printf("in library start routine\n");
test();
return 0;
}
int _init()
{
printf("\n%s: \n",__func__);
printf("in library init routine\n");
return 0;
}
int _fini()
{
printf("\n%s: \n",__func__);
printf("in library fini routine\n");
return 0;
}
这里我想知道为什么可执行文件会出现分段错误??我是否需要指定,因为这是程序的结束??如果是,如何??
如何克服分割错误??
另一个问题是这些_start(),_init(),_fini()仅在处理库时使用???
请启动例程无法返回。通常,它调用
\uu libc\u start\u main
,后者调用main
。然后当main
返回时,调用exit
,返回值为main
由于您自己定义\u start
而不是调用\u libc\u start\u main
,因此需要显式调用exit
。您将获得sigfault,因为该函数不应返回
有关更多详细信息,请参阅
_start:
in library start routine
test:
library test routine invoked
sum=5
l
_fini:
in library fini routine
Segmentation fault (core dumped)