gpt4 book ai didi

linux - 堆栈溢出段错误

转载 作者:IT王子 更新时间:2023-10-29 00:28:04 25 4
gpt4 key购买 nike

为什么 linux 内核会在堆栈溢出时产生段错误?当 c 中的 alloca 或临时数组的 fortran 创建溢出时,这会使调试变得非常尴尬。当然,运行时可能会产生更有用的错误。

最佳答案

您实际上可以使用信号处理程序捕获堆栈溢出的情况。

为此,您必须做两件事:

  • 使用 sigaction 为 SIGSEGV(段错误)设置信号处理程序,为此设置 SO_ONSTACK 标志。这指示内核在传递信号时使用替代堆栈。

  • 调用 sigaltstack() 以设置 SIGSEGV 的处理程序将使用的备用堆栈。

然后当你溢出堆栈时,内核会在传递信号之前切换到你的备用堆栈。进入信号处理程序后,您可以检查导致错误的地址并确定它是堆栈溢出还是常规错误。

关于linux - 堆栈溢出段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/81202/

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