打印

关于ARM的RW段数据压缩--彻底晕了

[复制链接]
2193|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
vimman|  楼主 | 2007-9-28 16:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本人想通过RW段的载入地址找到变量的初始值来对变量进行反初始化,纯粹为了节约空间,即变量的值被程序改变后需要再次初始化使读取其载入地址上的值,编译器用RealView MDK。结果发现该方法行不通,原因是映像文件的RW段是压缩过的,观察RW载入地址的memory窗口就可以发现定义的变量并非程序里写入的值,如变量的值为0x2a2a2a2a,它只存储一个0x2a。后来打开汇编代码,进入__main函数内,看能否通过汇编找到压缩的算法,发现解压缩的代码是thumb代码,同时会生成数据的前导部分,该前导与解压缩有关。为了彻底弄明白,我又建了一个小工程,只加入一个c文件,用同样的方法跟踪,发现又没有压缩?难道只有数据大到一定程度才会压缩?更奇怪的是未初始化或者初始化为0的单个变量被定位到了.data段,只有未初始化的数组才会定位到.bss段。.data和.bss到底和RW,ZI有啥对应关系呀?各位大侠,有研究过此类问题的吗?

相关帖子

沙发
vimman|  楼主 | 2007-9-29 08:59 | 只看该作者

咋没有高手理我呀?

自己先顶一下!

使用特权

评论回复
板凳
vimman|  楼主 | 2007-9-30 17:08 | 只看该作者

终于知道为啥了,自己给自己解答!

下载了MDK的中文文档,怎么找也找不到关于RW段数据压缩的说明!后来到keil网站上搜,里面有介绍;打开英文连接器文档里面有较详细地介绍。比较中英文文档中文文档中根本没有翻译这段。郁闷,不厚道!还号称官方中文文档。

使用特权

评论回复
地板
原野之狼| | 2007-9-30 17:16 | 只看该作者

还是看原版的好,呵呵~~~~~

纯粹赚分帖,haha

使用特权

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

本版积分规则

12

主题

81

帖子

0

粉丝