gpt4 book ai didi

c - 我怎样才能在程序的垂死挣扎中分配更多的堆栈?

转载 作者:太空狗 更新时间:2023-10-29 16:10:52 26 4
gpt4 key购买 nike

在 Posix 系统上,我正在编写一个信号处理程序,使用 sigaction .

我想在调用 exit() 之前记录一些调试信息。这涉及一些过程调用。

如果我们有堆栈溢出,有什么方法可以在不把事情搞得一团糟的情况下进行这些函数调用?

我知道在完成调试后,我将调用 exit(),因此我们永远不会展开堆栈。我可以编写一个小的汇编程序插入代码来将堆栈指针设置为堆栈的底部吗?

没关系,我在破坏它;稍后将不需要它,并且通过丢弃堆栈的开头,我不会丢弃堆栈的末尾。

有没有人做过这个或替代方案,并证明它有效?

最佳答案

在 POSIX 上,您可以使用 sigaltstack() 为特定的信号处理程序设置单独的堆栈。 Linux 上有关此功能的联机帮助页非常好:

The most common usage of an alternate signal stack is to handle the SIGSEGV signal that is generated if the space available for the normal process stack is exhausted: in this case, a signal handler for SIGSEGV cannot be invoked on the process stack; if we wish to handle it, we must use an alternate signal stack.

要记住的一件事是您需要使用 sigaction() 而不是 signal() 来建立相关的信号处理程序,但这是个好主意反正。此外,sigaction()struct sigactionsa_flags 需要包含 SA_ONSTACK

关于c - 我怎样才能在程序的垂死挣扎中分配更多的堆栈?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38330634/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com