ELF 与 MAP 文件之间的区别

Difference between the ELF vs MAP file

链接器可以输出ELF 和MAP 文件。这些文件在嵌入式系统领域尤其重要,因为 ELF 文件通常用于读取变量或函数的地址。此外,ELF文件被不同的嵌入式测量或分析工具使用。

当我打开一个 MAP 文件时,然后在其中,我可以看到每个全局变量和每个外部函数的以下信息:分配的地址、符号名称、分配的字节、内存单元和内存部分。

另一方面,一旦我打开 ELF 文件,它就是一个二进制文件,不是人类可读的。但是,我使用的一些工具能够读出并解释它。这些工具可以解析ELF文件,获取variable/function的符号名及其地址等信息,甚至可以显示函数原型。

据我了解,ELF和MAP文件包含的信息基本相同,只是前者是二进制文件,后者是文本文件。 那么从内容的角度来看,这两个文件的实际区别是什么?

提前致谢!

链接器的主要输出(即其主要目的)是生成完全链接的可执行代码。那就是 ELF(可执行可链接格式)文件。正如您所观察到的,ELF 文件可能包含符号 - 这些用于调试。它还可能包含将机器代码与生成它的源代码相关联的元数据。但它的大部分内容(以及非可选部分)是您的应用程序的可执行机器代码和数据对象。

MAP 文件是可选的仅供参考 人类可读的输出,其中包含有关应用程序中代码和数据对象的位置和大小的信息。 MAP 文件包含一个摘要,显示代码的总大小和内存使用情况。

在嵌入式交叉开发环境中,ELF文件中的符号信息在将代码加载到源代码级符号调试器中时使用。调试器获取 ELF 文件中的二进制 code/data 段并将它们加载到目标上(通常使用 JTAG 或其他 debug/programming 硬件工具),它将符号和源级调试元数据加载到调试器,然后当真正的机器代码在目标上执行时,该执行反映在原始源代码中的调试器中,您可以在源代码级别查看、步进和断点代码。

简而言之,ELF文件就是你的程序。顾名思义,MAP 文件是可执行文件的映射 - 它告诉您可执行文件中的位置。