ubuntu gcc 编译环境下的踩内存问题

发布于 2020-06-25 22:21:02
今天调试AT组件下的webclinet的代码时出现奇怪的assert, 环境如下:
ubuntu18.04

arm-none-eabi-gcc (15:6.3.1+svn253039-1build1) 6.3.1 20170620
rtthread-lts-3.1.x
at-device-v2.0.2
webclient-v2.1.2

发生问题时的堆栈:

Screenshot from 2020-06-25 21-53-09.png
根据经验应该是发生了堆内存的越界写入的问题,于是设置断点和watch point 追踪肇事者
Screenshot from 2020-06-25 22-00-19.png
最终发现是一处vsscanf的调用导致的越界访问,篡改了timer的数据
Screenshot from 2020-06-25 22-01-59.png
libc使用的是默认的newlib,从上面看似乎是fp=fp@entry=0x20008820这个地方有问题

因为操作的内存是resp,它的地址是0x2000809c
Screenshot from 2020-06-25 22-05-51.png
从它的数据来看,本身并没有越到timer的地址0x20008550, 但是为啥上面的entry已经到了0x20008820了

定位到这里有点不知所措了,不知道是不是编译工具链的问题。

有没有经常在ubuntu下基于rtthread开发的小伙伴碰到类似问题?









查看更多

关注者
0
被浏览
41
1 个回答
qq_还没想好
qq_还没想好 2020-07-06

是不是线程栈小了?试试将栈改大

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友