关于elf文件格式

关于elf文件格式

ID:34111066

大小:745.40 KB

页数:35页

时间:2019-03-03

关于elf文件格式_第1页
关于elf文件格式_第2页
关于elf文件格式_第3页
关于elf文件格式_第4页
关于elf文件格式_第5页
资源描述:

《关于elf文件格式》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、现代Linux采用ELF(ExecutableandLinkingFormat)做为其可连接和可执行文件的格式,因此ELF格式也向我们透出了一点Linux核内的情景,就像戏台维幕留下的一条未拉严的缝。PC世界32仍是主流,但64位的脚步却已如此的逼近。如果你对Windows比较熟悉,本文还将时时把你带回到PE中,在它们的相似之处稍做比较。ELF文件以“ELF头”开始,后面可选择的跟随着程序头和节头。地理学用等高线与等温线分别展示同一地区的地势和气候,程序头和节头则分别从加载与连接角度来描述EFL

2、文件的组织方式。ELF头------------------------------------------------ELF头也叫ELF文件头,它位于文件中最开始的地方。/usr/src/linux/include/linux/elf.htypedefstructelf32_hdr{unsignedchare_ident[EI_NIDENT];Elf32_Halfe_type;Elf32_Halfe_machine;Elf32_Worde_version;Elf32_Addre_entry;/

3、*Entrypoint*/Elf32_Offe_phoff;Elf32_Offe_shoff;Elf32_Worde_flags;Elf32_Halfe_ehsize;Elf32_Halfe_phentsize;Elf32_Halfe_phnum;Elf32_Halfe_shentsize;Elf32_Halfe_shnum;Elf32_Halfe_shstrndx;}Elf32_Ehdr;#defineEI_NIDENT16ELF头中每个字段的含意如下:Elf32_Ehdr->e_ident[

4、](Magic)这个字段是ELF头结构中的第一个字段,在elf.h中EI_NIDENT被定义为16,因此它占用16个字节。e_ident的前四个字节顺次应该是0x7f、0x45、0x4c、0x46,也就是"177ELF"。这是ELF文件的标志,任何一个ELF文件这四个字节都完全相同。16进制8进制字母0x7f01770x45E0x4cL0x46F第5个字节标志了ELF格式是32位还是64位,32位是1,64位是2。第6个字节,在0x86系统上是1,表明数据存储方式为低字节优先。第10个字节,指

5、明了在e_ident中从第几个字节开始后面的字节未使用。Elf32_Ehdr->e_type(Type)ELF文件的类型,1表示此文件是重定位文件,2表示可执行文件,3表示此文件是一个动态连接库。Elf32_Ehdr->e_machine(Machine)CPU类型,它指出了此文件使用何种指令集。如果是Intel0x386CPU此值为3,如果是AMD64CPU此值为62也就是16进制的0x3E。Elf32_Ehdr->e_version(Version)ELF文件版本,为1。Elf32_Ehdr

6、->e_entry(Entrypointaddress)可执行文件的入口虚拟地址。此字段指出了该文件中第一条可执行机器指令在进程被正确加载后的内存地址!(注:入口地址并不是可执行文件的第一个函数--main函数的地址)。Elf32_Ehdr->e_phoff(Startofprogramheaders)程序头在ELF文件中的偏移量。如果程序头不存在此值为0。Elf32_Ehdr->e_shoff(Startofsectionheaders)节头在ELF文件中的偏移量。如果节头不存在此值为0。El

7、f32_Ehdr->e_ehsize(Sizeof-ELFheader)它描述了“ELF头”自身占用的字节数。Elf32_Ehdr->e_phentsize(Sizeofprogramheaders)程序头中的每一个结构占用的字节数。程序头也叫程序头表,可以被看做一个在文件中连续存储的结构数组,数组中每一项是一个结构,此字段给出了这个结构占用的字节大小。e_phoff指出程序头在ELF文件中的起始偏移。Elf32_Ehdr->e_phnum(Numberofprogramheaders)此字段给

8、出了程序头中保存了多少个结构。如果程序头中有3个结构则程序头(程序头表)在文件中占用了(3×e_phentsize)个字节的大小。Elf32_Ehdr->e_shentsize(Sizeofsectionheaders)节头中每个结构占用的字节大小。节头与程序头类似也是一个结构数组,关于这两个结构的定义将分别在讲述程序头和节头的时候给出。Elf32_Ehdr->e_shnum(Numberofsectionheaders)节头中保存了多少个结构。Elf32_Ehdr->e_shstrndx(Se

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。