1
2
如果您知道堆栈的大小、堆栈的起始位置以及堆栈在内存中的增长方向,那么只需检查 stack pointer 看看它是否超过了堆栈的末尾。C++不允许直接访问堆栈指针。您可以很容易地在程序集中编写一个小函数来执行这个分析,并将它链接到您的程序中。 |
2
10
假设你不在一个会停止你的应用程序并说“堆栈溢出”的平台上,我怀疑你会看到与任何类型的缓冲区溢出相同的行为。堆栈只是程序的另一个预分配内存块,如果超出了这些限制…祝你好运!谁知道你会踩到什么! 你可以把CPU的温度读数写下来,也可以是你给Larry打的邮件,也可以是有点说内核被锁定了,导致了一个有趣的死锁状态!谁知道呢。 至于C++,没有什么说堆栈应该与内存中的其他事物相关,或者这个东西甚至需要堆栈! |
3
0
异常代码
通常,当你意识到你的SEH停止工作时,诊断起来更容易。 |
4
0
也许有点离题,但ADA中的分析性问题(任务中堆栈空间不足)是一个相当常见的“不常见”错误。许多编译器将停止任务(但不是主任务),并出现程序错误异常。 在某种程度上,你几乎必须能够嗅出这个。它往往从“我在任务中移动了这个大数组,突然它停止工作”这样的事情开始。 |
5
-1
将文本输出到屏幕,与测试程序中的代码行混合在一起。以前的bash命令和其他不明来源的文本也存在。添加到所有程序文本损坏的内容中。 |