当我抛出方法 A 时,它会导致缓冲区溢出,但当我返回时,它运行正常。 我认为 throw 将执行移动到调用者方法,因此它去往的地址应该与返回地址相同,但我显然错了。 有没有办法在 Visual Studio 调试器中查看抛出的地址?
谢谢
贝尔库斯: 这是否意味着上层调用方法的堆栈已损坏?例如,
Method A calls
Method B calls
Method C. Method C throws an exception
那么,有没有可能方法C的返回地址没问题,而方法B的返回地址坏了,导致缓冲区溢出?我看到的是,如果没有抛出,我的应用程序运行良好,所以我认为方法 A、B 和 C 都有有效的返回地址。
最佳答案
Throw 将展开堆栈,直到它到达其中包含 catch 的函数。返回地址无关紧要,因为如果需要,throw 可以上升几层堆栈帧。
关于c++ - 缓冲区溢出抛出返回地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3039273/