Linux kernel 堆栈损坏和使用备用信号堆栈

Linux kernel 堆栈损坏和使用备用信号堆栈,linux-kernel,stack,signals,Linux Kernel,Stack,Signals,我正在阅读Linux程序员手册中关于替代信号堆栈的内容 我看到当用户的堆栈损坏或溢出时,会使用sigaltstack。我的问题是如何在运行时检测堆栈是否损坏 在我的生产运行程序中,我想使用备用信号堆栈,如果我的程序检测到堆栈损坏。问这个问题对吗?一些线程中的人谈论使用Valgrind等调试工具,但不幸的是,在生产环境中无法使用这种工具。您无法从进程本身检测到损坏的堆栈-一旦堆栈损坏,您的整个程序,包括您可以尝试使用的任何函数/变量来检测损坏,都是不可预测的 即使可以检测到损坏的堆栈,也无法修复它

我正在阅读Linux程序员手册中关于替代信号堆栈的内容

我看到当用户的堆栈损坏或溢出时,会使用sigaltstack。我的问题是如何在运行时检测堆栈是否损坏


在我的生产运行程序中,我想使用备用信号堆栈,如果我的程序检测到堆栈损坏。问这个问题对吗?一些线程中的人谈论使用Valgrind等调试工具,但不幸的是,在生产环境中无法使用这种工具。

您无法从进程本身检测到损坏的堆栈-一旦堆栈损坏,您的整个程序,包括您可以尝试使用的任何函数/变量来检测损坏,都是不可预测的

即使可以检测到损坏的堆栈,也无法修复它。无法确定在损坏的堆栈上运行代码会造成什么损害。所以最好的办法可能是在那一刻退出


完整阅读手册页,它给出的使用备用堆栈的原因是处理SIGSEGV的一个很好的原因。虽然你通常也无法修复这一点,但戒烟几乎是你唯一能做的事。

我已经读过了,但我没有指出这一点。我明白。所以我真的看不出这个特性有什么意义,只是因为有了给定的机制,我不得不为备用堆栈保留内存;SIGSEGV处理程序的另一个用途是在内存不足或堆栈耗尽的情况下获取堆栈跟踪。这是很有用的,但是只有当你有一个备用堆栈,并且你的主堆栈没有损坏,否则堆栈跟踪是没有意义的。如果你能回答这个问题,我将不胜感激-