基于堆栈的缓冲区溢出问题记录

问题:

在release下,选择椭圆选择工具,绘制选择区域,APP crash,在离开HighLightROICell函数时报错
在这里插入图片描述

分析

  • 缓冲区溢出问题本质其实就是复制一个内存区域的内容到另一个内存区域,而目标内存区域容量太小无法容纳
  • 函数A在调用函数B时,A的函数地址会存储在堆栈中,若函数B中的代码存在堆栈溢出,一般就是内存拷贝时,目标内存分配不足导致,就是导致堆栈混乱,使得在离开函数B时找不到A的地址,进而报错

跟踪

  • 第一步,我多次分析查找B函数中的代码,发现并没有涉及到内存拷贝相关的代码,有分配内存的代码,但应该不会有溢出,
  • 第二步,我将代码一段一段注释,然后定位到 selection->AddNode(selectionNode);是这一句导致报错,但是这个接口是第三方接口,之前写测试demo都没有问题的,
  • 第三步,我将这段代码重新抠出来,在demo里面去运行,发现也会报错,那么怀疑是不是库有问题,
  • 第四步,检查动态库,发现release的dll库大小居然跟debug的dll库大小一致,这显然不正常,然后重新编译了一把三方库的release版,再次替换运行,问题解决。

猜你喜欢

转载自blog.csdn.net/tianzhiyi1989sq/article/details/101380096