我有一个STM32,我在其中加载ELF文件(使用OpenOCD和JTAG)。到目前为止,我还没有真正关注我加载的ELF文件的大小。
通常,当我编译一个对我的电路板来说太大的ELF文件时(我的电路板有128KB的RAM可以加载可执行文件),链接器会抱怨(在链接器脚本中我指定了RAM的大小)。
现在我注意到输出的ELF文件的大小,我看到它是261KB,但链接器还没有抱怨!
为什么我的ELF文件如此之大,但我的链接器可以正常使用它?主机上的ELF文件是否完全加载到主板上?
答案 0 :(得分:5)
否 - ELF包含未加载的重定位记录等内容。 可以还包含仅由调试器加载的调试信息(通常为DWARF格式)。
您可能希望使用readelf
来了解您的某个ELF文件实际包含的内容。你可能不想一直这样做,但是至少做几次这样做才能知道那里有什么可以更好地了解你正在处理什么。
readelf
是binutils包的一部分;很有可能你已经拥有了其他开发工具附带的副本。
如果你想了解更多细节,谷歌搜索“ELF格式”之类的东西应该会出现很多文章。但请注意,ELF是一种非常重要的格式。如果您决定要了解所有细节,则需要花费大量的时间和精力。