Gcc Map文件

Gcc Map文件

简介

map文件是通过编译器编译之后,生成的程序、数据及IO空间信息的一种映射文件,里面包含函数大小,入口地址等一些重要信息。

从map文件我们可以了解到:

  • 程序各区段的寻址是否正确
  • 程序各区段的size,即目前存储器的使用量
  • 程序中各个symbol的地址
  • 各个symbol在存储器中的顺序关系(这在调试时很有用)
  • 各个程序文件的存储用量

Map文件生成

生成map文件是链接器ld的功能,有两种方式可以生成map文件:

  • 通过gcc参数-Wl,-Map,:
    gcc -o helloworld helloworld.c -Wl,-Map,file_name.map

  • 通过ld参数-Map:
    ld -Map file_name.map helloworld.o -o helloworld

Map文件用处

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

参考

  1. gcc编译链接之Map文件分析 - 简书

updatedupdated2024-05-152024-05-15