通过特殊功能分段故障
为了观察目的,我使用_start(),_init(),_fini()编写了一个程序,目标是不要使用startfiles。 代码如下
#include <stdio.h>
void test()
{
printf("n%s: n",__func__);
printf("library test routine invokedn");
int a=3,b=2;
int sum=a+b;
printf("sum=%dn",sum);
getchar();
_fini();
}
int _start()
{
printf("n%s: n",__func__);
printf("in library start routinen");
test();
return 0;
}
int _init()
{
printf("n%s: n",__func__);
printf("in library init routinen");
return 0;
}
int _fini()
{
printf("n%s: n",__func__);
printf("in library fini routinen");
return 0;
}
符合
gcc -nostartfiles test.c -o test
和输出是
_start:
in library start routine
test:
library test routine invoked
sum=5
l
_fini:
in library fini routine
Segmentation fault (core dumped)
在这里我想知道为什么可执行文件给出了段错误? 我是否需要指定程序结束? 如果是这样,怎么样? 可以做些什么来克服分段故障? 另一个问题是,这些_start(),_init(),_fini()仅用于处理库时? 请
_start
例程不能返回。 通常,它会调用调用main
__libc_start_main
。 然后当main
返回时, __libc_start_main
用main
的返回值调用exit
。
既然你自己定义了_start
而不是调用__libc_start_main
,你需要明确地调用exit
。 你会得到一个sigfault,因为该函数不会返回。
看到这个问题更多的细节。
链接地址: http://www.djcxy.com/p/79931.html上一篇: segmentation fault by Special functions
下一篇: Segmentation fault while running the binary file copied by C program