通过特殊功能分段故障

为了观察目的,我使用_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_mainmain的返回值调用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