我如何为SIGSEGV分配备用堆栈?

时间:2013-10-02 18:33:00

标签: c segmentation-fault stack signals systems-programming

我正在使用sigaction()函数注册SIGSEGV(用于分段错误)。它适用于所有情况,但除了一种情况,即当堆栈溢出时。我搜索解决了这个问题。然后我得到答案,我们必须分配备用堆栈。但我不知道如何为信号注册分配altrenate堆栈。请帮我逐步为segmenaion故障分配备用堆栈。

2 个答案:

答案 0 :(得分:2)

您可以使用sigaltstack

stack_t stack = {
    .ss_sp = malloc(SIGSTKSZ),
    .ss_size = SIGSTKSZ,
    .ss_flags = 0
};

if (sigaltstack(&stack, NULL))
    perror("sigaltstack");

此时只需使用sigaction建立信号处理程序并使用sa_flags = SA_ONSTACK

答案 1 :(得分:-1)

首先使用sigaltstack()

建立一个替代堆栈

其次,在安装信号处理程序时,使用sigaction()并在struct sigaction的sa_flags成员中设置SA_ONSTACK。