链接时产生Map文件作用和必要性

本文介绍了如何通过Linker产生的Map文件来检查程序的存储器使用情况及符号映射关系。主要内容包括程序各段的地址分配、大小、符号位置等信息,并强调了Map文件在调试过程中的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

可以要求linker产生map文件(例如GNU Linker ‘ld’的-m参数),虽然每套编译工具产生map文件格式可能都不一样,但它的基本用途就是记录项目中每一个Symbol之LMA与VMA的对应关系。这个map文件很有用,我们可以从map文件中得到下列信息:

·程序各区段的寻址是否正确

·程序各区段的size,即目前存储器的使用量

·程序中各个symbol的地址

·各个symbol在存储器中的顺序关系(这在调试时很有用)

·各个程序文件的存储用量


map文件不是程序,所以不会有注释在里面

做出可执行文件下载到机器上,你如何知道程序段或数据段会不会太大,会不会超过ROM或RAM的size?你如何知道Link脚本有没有写错,每个程序区段都确实寻址到符合机器的存储器设定?当然你可以下载进机器运行就知道了吗?     但是认为负责整合的工程师一定要检查下map文件,有些问题只会造成系统的不稳定,而不会马上死机,这种问题最麻烦。

例如,数据超过RAM的size,在测试时可能不会马上出问题,只有在用到高地址的数据时才可能会压到其他变量,只要系统不会马上用到这个被破坏变量,那么,当下也就不会感觉程序有问题,当发现系统有问题时,极有可能已经不在相关的功能上了,这对调试会造成很大的困扰,一定要尽量预防。

至于检查的方法很简单,只要搜寻各个区段的起始和结束地址,以及你自己在Link脚本定义的变量,确认其LMA,VMA和size都没有问题就可以了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值