ARM映像文件的结构

来源:互联网 发布:java一行一行写入文件 编辑:程序博客网 时间:2024/04/30 11:49

       今天把ARM映像文件的结构给看了,下面是我做的笔记:      

       ARM映像文件的结构包括物理结构和逻辑结构。

       所谓物理结构就是目标文件.o和可执行映像文件.axf的内部组织结构,它们都是ELF格式的,但还是有区别,目标文件.o的基本结构由ELF Header,Program Header Table optional,Section,Section Header Table组成,其中Section包含了目标文件真正有用的信息,基本的Section有.text  .bss  .data  .symtab,另外Program Header Table 可由可无。可执行映像文件的基本结构由ELF Header,Program Header Table,Segment,Section Header Table optional组成,与目标文件不同的是其中的Program Header Table是必需的,因为它提供了程序执行所需要的基本信息。Segment是可执行映像文件的主要组成,我们知道编译器输出的目标文件的主要组成部分是区(Section),当链接器链接目标文件的时候,就会将目标文件中相同属性的区组合成段,主要包含三个段:Text段(代码段),Data段(初始化数据段),BSS段(未初始化数据段),在实际的嵌入式系统中,链接器生成.axf格式的可执行映像文件,用它来做调试,如果通过调试,需要装载到最终的产品里,还必需用fromelf工具掐头去尾,掐掉ELF头,去掉.symtab,.debug和.symtab区里的信息,最终生成纯的二进制(binary image),然后把它装载到最后的产品里。

      映像文件的逻辑结构中有三个概念,它们由小到大分别为:输入区,输出区,域,属性相同的输入区组成了输出区,其实输出区就是前面提到的组成映像文件物理结构中的段,而一个或几个输出区也就是段组成了域,这些域就组成了可执行映像文件。域又分为装载域和运行域,装载域描述了运行前输出段和域在ROM/RAM里的分布状态;运行域描述了运行时输出段和域在ROM/RAM里的分布状态。大多数情况下,映像文件在执行前把它装载在ROM里,而当运行时,域里的有些输出段(比如RW类型的输出段)必须复制到RAM里,程序才能正常运行,所以,在装载和运行时,RW类型的输出段处在不同的位置(地址空间)。另外ZI输出段在装载域是不存在的,在运行域里才建立它,并把它初始化为0.

原创粉丝点击