|嵌入式开发:使用映射文件查找缓冲区溢出问题

|嵌入式开发:使用映射文件查找缓冲区溢出问题

文章图片


缓冲区溢出是对嵌入式软件造成严重破坏的错误之一 。 该系统似乎运行良好 , 然后突然 , 奇怪的事情开始发生!一直表现的变量突然以意想不到的值结束 。 嵌入式开发人员经常会被难住并花费数天时间试图弄清楚发生了什么 , 从而浪费了宝贵的时间和金钱 。 在今天的帖子中 , 我将向你展示如何快速有效地识别缓冲区溢出并修复它们 。
缓冲区溢出症状
缓冲区溢出通常会给系统带来一些开发人员可以轻松识别的症状 。 这些症状通常可以在似乎与发生溢出的位置无关的变量中找到 , 例如:
初始化值不正确
没有任何代码作用于变量的变化值
超出范围的值应该是不可能的

使用映射文件查找缓冲区溢出
在嵌入式开发中 , 缓冲区溢出的问题是它们很难找到 , 谁知道是什么溢出到变量内存空间并破坏了它?如果你怀疑自己有缓冲区溢出 , 可以使用一个简单的过程来查找或排除溢出 。识别似乎已损坏的变量 。
【|嵌入式开发:使用映射文件查找缓冲区溢出问题】编译你的代码 。
导航到你编译的项目文件夹并找到你的地图文件 。
在映射文件中搜索损坏的变量 。
找到后 , 查看损坏的变量旁边的变量 。 这很可能是罪魁祸首!
在你的代码中搜索罪魁祸首初始化 。
增加缓冲区大小 , 看看这是否确实是原因 。
我有一个行为不正确的变量 。 所以 , 我按照上面的步骤 , 在我的地图文件中发现了以下内容:

我的ScrState 变量在内存中的前面有一个bytesToSend 数组!在检查了这个数组和使用它的代码后 , 我发现我将缓冲区覆盖了1 个字节 , 值为0!足以将我的 ScrState= True 变量更改为False 。
结论
如果查找缓冲区溢出的过程很随意 , 则很难找到缓冲区溢出 。 缓冲区溢出通常是可重复的 , 这允许嵌入式开发人员追踪它们导致的损坏 。 快速搜索映射文件并识别前面的变量可以帮助开发人员快速找到罪魁祸首并修复其溢出 。