基于powerpclinux的elf格式分析

基于powerpclinux的elf格式分析

ID:23236233

大小:984.50 KB

页数:27页

时间:2018-11-05

基于powerpclinux的elf格式分析_第1页
基于powerpclinux的elf格式分析_第2页
基于powerpclinux的elf格式分析_第3页
基于powerpclinux的elf格式分析_第4页
基于powerpclinux的elf格式分析_第5页
资源描述:

《基于powerpclinux的elf格式分析》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、基于PowerPCLinux的ELF格式分析第一部分ELF格式概述ELF(ExecutableandLinkableFormat)是一种对可执行文件、目标文件以及库文件使用的文件格式,它在Linux下成为标准文件已经有很长的一段时间,代替了早期的a.out格式。ELF格式的一个优点是同一个文件格式可以用在LinuxKernel支持的所有体系结构之上。这不仅简化了用户空间工具程序的创建,也简化了内核自身的程序设计,比如必须为可执行程序生成装载例程时。但是文件格式相同并不意味着不同系统上的程序之间存在二进制兼

2、容性,例如FreeBSD和Linux都使用ELF作为二进制格式,但是FreeBSD上的程序不能运行于Linux上,因为两者在系统调用机制和系统调用语义方面仍然有所不同,反之亦然;如果想让二者之间的程序能够运行,必须要有一个中间仿真层。同样PowerPC平台编译的ELF程序,也不能在X86平台的机器上运行,反之依然,因为两者的体系结构是完全不同的。但是由于ELF格式的存在,相同体系结构上的ELF程序本身的相关信息,以及程序的各个部分在二进制文件中的编码方式都是相同的。Linux不仅将ELF用于用户空间应用程

3、序和库,还用于工具模块,另外Linux内核本身也是ELF格式。备注:ELF文件是一种开放的格式,其规范可以自由获得。ELF文件有三种类型:可重定位文件:也就是通常称的目标文件,后缀为.o;共享文件:也就是通常称的库文件,后缀为.so;可执行文件:本文主要讨论的文件格式;总的来说,可执行文件的格式与上述两种文件的格式之间的区别主要在于观察的角度不同:一种称为连接视图(LinkingView),一种称为执行视图(ExecutionView)。示意图如下:第二部分布局和结构ELFHeader:除了用于标识ELF

4、文件的几个字节之外,ELF文件头还包含了有关文件类型和大小的信息,以及文件加载后程序执行的入口信息等等,总之ELF头部是一个关于本ELF文件的路线图(roadmap),从总体上描述文件的结构。程序表头(ProgramHeadTable):向系统提供了可执行文件的数据在进程虚拟地址空间中组织方式的相关信息,它还表示了文件可能包含的段的数目,段的位置以及用途。各个段SegmentX(X=1,2,…)和节SectionX(X=1,2,…):保存了与文件相关的各种形式的数据,例如符号表、实际的二进制代码、固定值或

5、者程序使用的数值常数。节头表(SectionHeaderTable):包含了与各段相关的附加信息。下面我们一个例子,用readelf工具来分析ELF文件:例如如下://test.c#include#includeintadd(inta,intb){printf("Numbersareaddedtogether");returna+b;}intmain(){inta,b;a=3;b=4;intret=add(a,b);printf("Result:%u",ret

6、);exit(0);}我们用file命令来显示编译器生成的两个文件的信息:一个是可执行文件,另一个是可重定位文件,示意图如下:2.1ELFheader文件结构我们用readelf工具来分析上例中生成ELF文件的ELFheader,视图如下:在test文件的开始处是四个标志字节,0x7f、0x45、0x4c、0x46。其中的0x45、0x4c、0x46分别代码“E”“L”“F”的ASCII码,这使得所有处理ELF文件的工具都可以识别ELF类型的文件。还有一些与机器体系结构相关的信息。比如上图中Machine

7、类型为PowerPC表明该ELF文件运行于PowerPC平台;ELF32表明这是一个运行在32位平台的机器;文件类型为EXEC表明这是一个可执行程序;Version用于区分当前ELF文件的各个修订版本,当前ELF文件是基于版本1;另外还包含ELF文件各个部分的长度和索引的位置,后面会相信讨论。如果ELF文件是可重定位文件,不同的字段如下图所示:如图所示:test.o的文件类型为REL,即它是一个可重定位的文件,其代码可以移动到任意位置,该文件没有程序头ProgramHeaders,对于需要链接的对象而言该

8、表是不需要的,所以其所以长度均为0。2.2程序头表(ProgramHeadTable)分析下面我们来分析一下ELF可执行文件test中ProgramHeadTable,示意图如下:在ProgramHeaders中列出了8个段,这些段组成了最终在内存中执行的程序,并且还提供了各个段在虚拟地址空间和物理地址空间中的位置、大小、访问授权和其它方面的信息。从上图中我们可以看出,示例程序中包含的各个段的语义如下:PHDR:保存Progr

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

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

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