机器之间差异堆栈粉碎行为的原因

时间:2011-05-26 09:55:04

标签: c gcc stack stack-smash

我们正试图在一些生成的代码中追踪一些堆栈粉碎错误。问题是堆栈粉碎错误不是100%确定性的,只发生在一台机器而不是其他机器上。行为上有什么可能的原因?

我们使用堆栈保护标志运行gcc。

1 个答案:

答案 0 :(得分:2)

尝试使用Valgrind

Memcheck: a memory error detector

如果涉及线程和时间,则有可能在罕见或不可预测的情况下发生。我已经看到多线程代码在100次中运行99次....然后失败。如果你很幸运,它只是一个堆栈覆盖错误,一直发生,但偶尔会产生后果。

Ptrcheck: an experimental heap, stack and global array overrun detector

-fstack-protector + valgrind ==> stack array overflow debugging?

您可以尝试使用gcc的{​​{1}}选项启用堆栈金丝雀。