打印

一线研发之声: keil uvision4默认scat文件的重大隐患

[复制链接]
17511|52
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
sedatefire|  楼主 | 2012-8-31 00:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 sedatefire 于 2013-7-6 14:33 编辑

本文描述一个keil uvision4在链接环节的重大隐患,会导致栈溢出,覆盖了用户全局变量空间。Cortex M3和M0系列这几年迅猛发展,相信使用M3和M0的工程师也不少了,诸位如果遇到系统变量莫名被修改的话,不妨来看看是否这个原因。

以STM32F103xx的一个scat档为例,keil默认的链接写法如下
。。。。




本文提纲如下
一.keil默认scat档分析
1.指出其栈空间的分配,紧挨在系统变量区域后面。
scat文件如下


map部分内容如下


2.栈如果分配不够,编译器是不会报警的,这不像c51那样是静态分析。
一个栈溢出的编译结果
c51的静态分析

3.栈的地址是压栈递减的,很容易就“溢出”覆盖系统变量区域的。
栈递减的测试代码如下,证明...

悄悄覆盖系统变量的代码如下,看map分析


二、提出DIY的scat档写法,将栈的空间放到芯片型号ram空间的最后面即可。
把栈隔开

三、keil编译器为何这样做的原因猜想。
为了通用,因为每一个M3的mcu的RAM空间大小都是不同的,无法做到面面俱到。


PS:未接贴,一直提醒,赶快过来重新编辑下

其实就是一句话,M3的官方程序在跳转之前,对栈指针进行了初始化。
这个初始化的值,填得不妥,会导致系统崩溃。
因为跳转的时候,还执行了pop指令。
在满足xxx的条件下,就会出现指针地址溢出,非法,导致总线错误,系统当机。
为了解释这个事情,我得交代好多基础知识给新手啊。


相关帖子

沙发
sedatefire|  楼主 | 2012-8-31 00:44 | 只看该作者
哈,闪人啦,明晚回来续写
赶在八月前,看看能不能领到版主奖
呵呵,求31号24时前,给条裤子...嘻嘻

使用特权

评论回复
板凳
linqing171| | 2012-8-31 07:22 | 只看该作者
同意一条,就是一里面的2,其他的没有注意。

使用特权

评论回复
地板
dlyt_test001| | 2012-8-31 08:25 | 只看该作者
顶,学习一下!
我一般用默认的配置!

使用特权

评论回复
5
huangqi412| | 2012-8-31 08:53 | 只看该作者
占座

使用特权

评论回复
6
sedatefire|  楼主 | 2012-8-31 09:46 | 只看该作者
今天没迟到,抽空来瞄一下,顺便顶上去
晚上续写...

使用特权

评论回复
7
戒指320| | 2012-8-31 13:15 | 只看该作者
等待楼主 继续讲课

使用特权

评论回复
8
lixupengarm| | 2012-8-31 15:43 | 只看该作者
没注意

使用特权

评论回复
9
雷影少年| | 2012-8-31 15:55 | 只看该作者
期待楼主的新作

使用特权

评论回复
10
gtekled| | 2012-8-31 17:13 | 只看该作者
栈的地址是压栈递减的

使用特权

评论回复
11
misra| | 2012-8-31 20:00 | 只看该作者
关注。。。。

使用特权

评论回复
12
Wxy8030| | 2012-8-31 21:26 | 只看该作者
看看结果!

使用特权

评论回复
13
[惊涛骇浪]| | 2012-8-31 21:41 | 只看该作者
嘿嘿,楼主热心人啊

使用特权

评论回复
14
[惊涛骇浪]| | 2012-8-31 21:41 | 只看该作者
嘿嘿,楼主热心人啊

使用特权

评论回复
15
戒指320| | 2012-8-31 23:07 | 只看该作者
我再来看,楼主你啥时候讲。

使用特权

评论回复
16
sedatefire|  楼主 | 2012-9-1 00:52 | 只看该作者
哎 每天去公司再搞搞...
家里找不到资料来当例子

使用特权

评论回复
17
雷影少年| | 2012-9-1 07:36 | 只看该作者
没事~
咱有时间等

使用特权

评论回复
18
原野牧歌| | 2012-9-1 15:31 | 只看该作者
看看大侠怎么分析问题……

使用特权

评论回复
19
sanliu85| | 2012-9-1 15:34 | 只看该作者
持续关注中。。

使用特权

评论回复
20
FutureDeveloper| | 2012-9-1 17:05 | 只看该作者
Mark!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4393

主题

5935

帖子

33

粉丝