c++ - 缓冲区溢出抛出返回地址

标签 c++ buffer buffer-overrun

当我抛出方法 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/

相关文章:

java - 如何编译支持GPU的tflite?

c++ - 当所有子对象都改变时抑制多个信号发射的复合属性对象

c - 缓冲区溢出实验

c++ - _popen 使用引号时工作不正确

c++ - Qt ActiveX QAxObject 格式 Excel 单元格注释

java - JAVA中从服务器套接字缓冲区接收时消除半字符串

将多个 OpenCL 缓冲区组合成一个大缓冲区

当 1024 个字符是定界符时,Java Scanner 类在标记化中失败

c - 静态代码分析工具报告的缓冲区溢出问题