我在C ++中使用pthread编写了一个包含3个线程的程序。当其中一个线程发生缓冲区溢出时,整个程序终止,其他线程无法运行,并显示以下消息:*** stack smashing detected ***: ./a.out terminated
我想堆栈粉碎只会杀死BOF发生在其中的线程,其他线程仍然存活。所以,我试图忽略信号,但它并没有解决我的问题
这是我的计划:
#include <unistd.h>
#include <pthread.h>
#include <iostream>
#include <signal.h>
#include <string.h>
using namespace std;
int a = 0;
void sig_func(int sig)
{
}
void *func (void *arg)
{
int c = a++;
cout << "start thread " << c << endl;
if (c == 1)
{
char stuff[8];
strcpy(stuff, "123456789");
}
cout << "end thread " << c << endl;
}
int main ()
{
pthread_t tid1, tid2, tid3;
for(int i = 1; i <=31 ; i++) //this line ignores all signals from 1 to 31.
signal(i,sig_func);
pthread_create (&tid1, 0, func, 0);
sleep (1);
pthread_create (&tid2, 0, func, 0);
sleep (1);
pthread_create (&tid3, 0, func, 0);
sleep (1);
return 0;
}
当我用g++ a.cpp -lpthread
编译它时,输出如下:
start thread 0
end thread 0
start thread 1
end thread 1
*** stack smashing detected ***: ./a.out terminated
Aborted (core dumped)
有没有办法堆叠粉碎只导致杀死BOF中出现的线程,程序没有终止?
请注意,我不想使用-fno-stack-protector
选项编译我的程序,以避免被金丝雀保护。
答案 0 :(得分:0)
有没有办法避免在发生堆栈粉碎时终止程序?
没有