vimman 发表于 2007-9-28 16:30

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

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

vimman 发表于 2007-9-29 15:32

晕,咋没人理偶呀?

自己顶一下!

vimman 发表于 2007-9-30 17:09

自己给自己解答

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