I'm registering SIGSEGV (for Segmentation fault) Using sigaction() function. It working in all cases but except one case i.e. when stack is overflowing.I searched to resolve this problem. Then I get the answer, we have to assign alternate Stack. But I don't know how to assign altrenate stack for signal registration. Please help me to allocate alternate stack for segmenaion fault step by step.

有帮助吗?

解决方案

You can do it with sigaltstack.

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

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

At this point just establish your signal handler with sigaction and use sa_flags = SA_ONSTACK.

其他提示

First establish an alternative stack with sigaltstack()

Secondly, when installing the signal handler, use sigaction() and set the SA_ONSTACK in the sa_flags member of the struct sigaction.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top