代码之家  ›  专栏  ›  技术社区  ›  gangadhars

如何为SIGSEGV分配备用堆栈?

  •  2
  • gangadhars  · 技术社区  · 11 年前

    我正在使用注册SIGSEGV(用于分段故障) sigaction() 作用它在所有情况下都能工作,但只有一种情况除外,即堆栈溢出。我搜索以解决这个问题。然后我得到了答案,我们必须分配备用堆栈。但我不知道如何为信号注册分配altrenate堆栈。请帮助我逐步为分段故障分配备用堆栈。

    2 回复  |  直到 11 年前
        1
  •  2
  •   cnicutar    11 年前

    你可以用 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 .

        2
  •  -1
  •   nos    11 年前

    首先与建立替代堆栈 sigaltstack ()

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