1 / 51
文档名称:

C6000ELF文件格式课件.ppt

格式:ppt   大小:2,985KB   页数:51页
下载后只包含 1 个 PPT 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

C6000ELF文件格式课件.ppt

上传人:yixingmaoj 2023/3/23 文件大小:2.92 MB

下载得到文件列表

C6000ELF文件格式课件.ppt

文档介绍

文档介绍:该【C6000ELF文件格式课件 】是由【yixingmaoj】上传分享,文档一共【51】页,该文档可以免费在线阅读,需要了解更多关于【C6000ELF文件格式课件 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。TMS320C6000的生成文件格式——ELF格式介绍
主要内容
ELF文件格式
2
概述
1

相对可执行文件有三个重要的概念:编译(compile)、连接(link,也可称为链接、联接)、加载(load)。源程序文件被编译成目标文件,多个目标文件被连接成一个最终的可执行文件,可执行文件被加载到内存中运行。因为本文重点是讨论可执行文件格式,因此加载过程也相对重点讨论。下面是LINUX平台下ELF文件加载过程的一个简单描述()。

1)内核首先读ELF文件的头部,然后根据头部的数据指示分别读入各种数据结构,找到标记为可加载(loadable)的段,把段内容加载到内存中。段的标记指示该段在内存中是否可读、可写,可执行。显然,文本段(.text)是只读可执行(-r-x),而数据段是可读可写(-r-w)。这种方式是利用了现代操作系统和处理器对内存的保护功能。
2)内核分析出ELF文件标记为PT_INTERP的段中所对应的动态连接器名称,并加载动态连接器。
3)内核在新进程的堆栈中设置一些标记-值对,以指示动态连接器的相关操作。
4)内核把控制传递给动态连接器。
5)动态连接器检查程序对外部文件(共享库)的依赖性,并在需要时对其进行加载。

6)态连接器对程序的外部引用进行重定位,通俗的讲,就是告诉程序其引用的外部变量/函数的地址,此地址位于共享库被加载在内存的区间内。动态连接还有一个延迟(Lazy)定位的特性,即只在"真正"需要引用符号时才重定位,这对提高程序运行效率有极大帮助。
7),进行程序运行的初始化。
8)动态连接器把控制传递给程序,从ELF文件头部中定义的程序进入点开始执行。在ELF格式中,程序进入点的值是显式存在的,在COFF格式中则是由规范隐含定义。

UNIX/LINUX平台下三种主要的可执行文件格式:(assemblerandlinkeditoroutput汇编器和链接编辑器的输出)、COFF(CommonObject通用对象文件格式)、ELF(ExecutableandLinkingFormat可执行和链接格式)。
CCSV5平台与上述LINUX平台下可执行文件格式的概念略有区别:,该文件的格式可在编译连接之前设定,。
设定路径为Properties->General->Advancedsetting->Outputformat

本文档仅详细说明ELF及COFF的格式标准
注意
本文档附带Demo例程,在CCSv5编程环境中编译汇编链接生成,并在TMS320C6678硬件平台进行了测试。
,该文件以ELF格式存储,是下文展示ELF格式内容时用到的样本文件。
,该文件详细列出了程序运行时的入口地址、所有字符地址、所有段数据存储地址及长度等信息。
以上两个文件可在例程的Debug文件夹下找到。



typedefstruct{
unsignedchare_ident[EI_NIDENT];/*魔数和相关信息*/
Elf32_Halfe_type; /*目标文件类型*/
Elf32_Halfe_machine; /*硬件体系*/
Elf32_Worde_version; /*目标文件版本*/
Elf32_Addre_entry; /*程序进入点*/
Elf32_Offe_phoff; /*程序头部偏移量*/
Elf32_Offe_shoff; /*节头部偏移量*/
Elf32_Worde_flags; /*处理器特定标志*/
Elf32_Halfe_ehsize; /*ELF头部长度*/
Elf32_Halfe_phentsize; /*程序头部中一个条目的长度*/
Elf32_Halfe_phnum; /*程序头部条目个数*/
Elf32_Halfe_shentsize; /*节头部中一个条目的长度*/
Elf32_Halfe_shnum; /*节头部条目个数*/
Elf32_Halfe_shstrndx; /*节头部字符表索引*/
}Elf32_Ehdr;
ELF头:ELF头部是一个关于本文件的路线图(roadmap),从总体上描述文件的结构,给出其他部分在文件中的相对位置及长度和数量信息。下面是ELF头部的数据结构:
数据结构中变量类型占用位宽分别为
Elf32_Half:16bits
Elf32_Word:32bits
Elf32_Addr:32bits
Elf32_Off:32bits
Unsignedchar:8bits
又:EI_NIDENT=16