什么是map文件?
简单的说:map文件是通过编译器编译之后,集程序、数据及IO空间的一种映射文件。
很多技术牛逼的工程师在遇到内存越界,或溢出的情况,首先想到的就是分析map文件。通过map文件可以知道函数大小,入口地址等一些重要信息。
我们在Keil中最常见的就是在编译之后,编译窗口会显示类似如下一段关于程序和数据大小的信息:
Program Size: Code=1112 RO-data=320 RW-data=0 ZI-data=1632
map文件内容分类
从上面输出配置可以看得出来map文件大概包含了哪些信息。map文件将其分为如下五大类:
1.Section Cross References:模块、段(入口)交叉引用
2.Removing Unused input sections from the image:移除未调用模块
3.Image Symbol Table:映射符号表
4.Memory Map of the image:内存(映射)分布
5.Image component sizes:存储组成大小
Section Cross References:模块、段(入口)交叉引用
这里仍然以main函数来说明 main.o(i.main) refers to delay.o(i.Delay_ms) for Delay_ms
意思是main.o中的main模块引用了delay.o中的Delay_ms模块
Removing Unused input sections from the image:移除未调用模块
这个就是移除掉没有使用到的东西,比如我们为了方便,会把所有的库函数都加入到工程中,但可能有的库函数模块没有使用掉,对这部分进行移除,最后是一段总结性的文字,总计501未调用的模块共21820字节从映像文件中移除
Image Symbol Table:映射符号表,也就是各个段所存储对应地址的表(图片删除了中间部分内容)。
5.1 Symbol分为两大类
1.Local Symbols:局部
2.Global Symbols:全局
5.2 Symbol内容要点
1.Symbol Name:符号名称
名称命名及分类请看最后给出的官方参考文档。
2.Value:存储对应的地址
大家会发现有0x0800xxxx、0x2000xxxx这样的地址。
0x0800xxxx指存储在FLASH里面的代码、变量等。
0x2000xxxx指存储在内存RAM中的变量Data等。
3.Ov Type:符号对应的类型
符号类型大概有几种:Number、Section、Thumb Code、Data等;
细心的朋友会发现:全局、静态变量等位于0x2000xxxx的内存RAM中。
4.Size:存储大小
这个容易理解,就是当前行Symbol占用大小。
5.Object(Section):段目标
这里一般指所在模块(源文件)。
Memory Map of the image:内存(映射)分布
Image Entry point : 0x08000131:指映射入口地址。
Load Region LR_IROM1 (Base: 0x08000000, Size: 0x00000598, Max: 0x00080000, ABSOLUTE):
指加载区域位于LR_IROM1开始地址0x08000000,大小有0x00000598,这块区域最大为0x00080000.
执行区域:
A.Execution Region ER_IROM1
B.Execution Region RW_IRAM1
这个区域,其实就是对应我们在keil的目标配置中的区域,
1.Base Addr:存储地址
0x0800xxxxFLASH地址和0x2000xxxx内存RAM地址。
2.Size:存储大小
3.Type:类型
Data:数据类型
Code:代码类型
Zero:未初始化变量类型
PAD:这个类型在map文件中放在这个位置,其实它不能算这里的类型。要翻译的话,只能说的“补充类型”。
ARM处理器是32位的,如果定义一个8位或者16位变量就会剩余一部分,这里就是指的“补充”的那部分,会发现后面的其他几个选项都没有对应的值。
4.Attr:属性
RO:存储与ROM中的段
RW:存储与RAM中的段
5.Section Name:段名
这里也可以说为入口分类名,与第一章节“Section Cross References”指的模块、段一样。
大概包含:RESET、.ARM、 .text、 i、 .data、 .bss、 HEAP、 STACK等。
6.Object:目标
参考文章
嵌入式Map文件解析_嵌入式生成的map文件有哪些关键信息-CSDN博客
STM32 | map文件详解_简述代码编译后生成的map文件里面的内容-CSDN博客
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ri-ji/38584.html