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

发布于 2024-11-09 23:43:46 字数 119 浏览 6 评论 0原文

我们正在尝试追踪某些生成代码中的一些堆栈崩溃错误。问题是堆栈粉碎错误不是 100% 确定性的,并且仅发生在一台机器上,而不发生在其他机器上。造成行为差异的可能原因有哪些?

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

We're trying to track down some stack smashing errors in some generated code. The problem is that the stack smashing errors are not 100% deterministic and only happens on one machine and not others. What possible reasons could there be for the difference in behaviour?

We're running gcc using the stack protector flags.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

恋竹姑娘 2024-11-16 23:43:46

尝试使用 Valgrind

Memcheck:内存错误检测器

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

Ptrcheck:实验性堆、堆栈和全局数组溢出检测器

-fstack-protector + valgrind ==>堆栈数组溢出调试?

您可以尝试使用 gcc-fstack-protector-all 选项启用堆栈金丝雀。

Try using Valgrind

Memcheck: a memory error detector

If threads and timing are involved it is possible that it could happen on rare or unpredictable occasions. I've seen multi-threaded code work 99 times out of 100....and then fail. If you are lucky it's just a stack overwrite error that happens all the time but only occasionally has consequences.

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

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

You could try enabling stack canaries with gcc's -fstack-protector-all option.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文