堆栈损坏检查方法

时间:2011-03-15 01:08:34

标签: stack overflow

1)如何使用一些独特的模式初始化堆栈?所以我可以在出口检查它?示例程序PLZ 2)如何在prolog中添加值并在epilog中检查它?示例程序PLZ

  • valgrind和电子围栏不适合我的多线程应用程序它太笨重我想要一些简单的技巧,如
  • 在prolog中添加const值
  • 在epilog中检查

感谢, VJ

1 个答案:

答案 0 :(得分:0)

在你的第一个问题中,我认为你正在谈论防止执行堆栈过度使用。存档有不同的技术,但我认为最接近“某种独特模式”的是金丝雀。

理论值:
金丝雀是一个(随机)检查值,位于函数返回地址的正下方。在从函数返回之前,系统检查金丝雀是否具有与之前相同的值。如果没有,则堆栈已超出,因为内存是从较低地址写入较高地址,并且您无法信任返回地址。

如何完成:

  1. 放置返回地址时 在堆栈上,放置了金丝雀 那里也是。
  2. 当功能退出时,检查金丝雀。如果金丝雀已被更改,请终止程序(或任何您认为合适的程序)。
  3. 有关金丝雀价值的更多信息,请参见here 这种(或其他一些防止堆栈超限技术)通常在现代编译器中实现
    我不知道你的第二个问题。