MAP文件分析
基本概念
段(section)
描述映像文件代码及数据块
RO
只读的数据和代码,包含RO-data和RO-code
RW
可读写的数据,由程序初始化
ZI
零初始化数据,由编译器初始化
.text
即RO-code
.constdata:
即RO-data
.bss:
即ZI
.data
即RW-data
文件构成
调用关系(Section Cross Reference)
冗余函数
默认即可。
局部标签与全局标签
局部标签是指用static修饰的变量或者函数。
第一列是函数名,前缀i.表示隶属于当前文件,出现无前缀的标签代表static标签。
第二列为地址,也是程序按照下载地址下载后,需要加载到内存的地址,此处可发现,flexspi的相关函数是在片内内存(RT1052片内RAM从0x00000000开始)中执行。
第三列信息中,Number可以忽略。
第四列信息中,大小为0且有前缀说明此标签为全局标签。
映像文件内存映射
加载地址即下载地址,是镜像存放的位置。
执行地址即CPU寻找代码的位置。
下图所示flexspi的相关的函数是被复制到内存中,让CPU进行调用的。
下图所示函数为就地执行的函数。
映像文件组件大小
这里的组件指的是单个源文件。
扩展
- _main的相关信息
在函数交叉引用时,可以发现entry文件所引用的函数,由函数名称可推断这些函数是被启动文件中的_main函数调用,可以发现sct的相关操作
_main_clock
_main_cpp_init
_main_init
_main_scatterload
_main_stk
entry4文件引用了_main函数
entry4文件引用了_scatterload函数
ini文件引用了_mian_after_scatterload函数
- scatter文件相关信息
分析镜像文件时,可以发现与sct文件相关的操作函数
__scatterload_copy
__scatterload_null
__scatterload_zeroinit