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

来源:互联网 发布:外卖软件排行 编辑:程序博客网 时间:2024/05/05 21:28

可以要求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都没有问题就可以了。

原创粉丝点击