ELF 与 MAP 文件之间的区别

Sim*_*ngs 2 embedded linker elf

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

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

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

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

先感谢您!

Cli*_*ord 7

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

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

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

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