linux efl 可执行文件装载

linux efl 可执行文件装载

ID:14052369

大小:78.00 KB

页数:7页

时间:2018-07-25

linux  efl 可执行文件装载_第1页
linux  efl 可执行文件装载_第2页
linux  efl 可执行文件装载_第3页
linux  efl 可执行文件装载_第4页
linux  efl 可执行文件装载_第5页
资源描述:

《linux efl 可执行文件装载》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、Elf文件格式:在include/elf.h文件里,定义了elf的文件格式如下:228#defineEI_NIDENT16229//liuxsadded;Elf32_Half==unsignedshort,Elf32_Word==unsignedlong.//liuxsadded;Elf32_Addr==unsignedlong;Elf32_Off==unsignedlong230typedefstructelf32_hdr{231unsignedchare_ident[EI_NIDENT];/*魔数和相关信息*/232Elf32

2、_Halfe_type;/*目标文件类型*/233Elf32_Halfe_machine;/*硬件体系*/234Elf32_Worde_version;/*目标文件版本*/235Elf32_Addre_entry;/*Entrypoint*//*程序进入点*/236Elf32_Offe_phoff;/*程序头部偏移量*/237Elf32_Offe_shoff;/*节头部偏移量*/238Elf32_Worde_flags;/*处理器特定标志*/239Elf32_Halfe_ehsize;/*ELF头部长度*/240Elf32_Hal

3、fe_phentsize;/*程序头部中一个条目的长度*/241Elf32_Halfe_phnum;/*程序头部条目个数*/242Elf32_Halfe_shentsize;/*节头部中一个条目的长度*/243Elf32_Halfe_shnum;/*节头部条目个数*/244Elf32_Halfe_shstrndx;/*节头部字符表索引*/245}Elf32_Eh头部共52个字节以下为示例代码的二进制代码(用hexdum–Ct1_arm查看,红色部分为代码,前面为标记,汇编代码为ARM下的代码,大端,所以两个字节是颠倒):00000

4、0007f454c46010201610000000000000000

5、.ELF...a........

6、000000100002002800000001000080d000000034

7、...(...........4

8、00000020000690f4000002020034002000030028

9、.........4....(

10、0000003000190016000000010000000000008000

11、................

12、前16个字节是属于unsignedchare_ident[EI_NIDENT],标识

13、ELF的一些信息。00000000-00000003:7F454C46(红色部分为大端显示,需要颠倒)ELF文件以一个magicnumber开头(7F),接下来是’E’,’L’,’F’这三个字符。00000004:01这位是标明文件的类型,如果是0为非法,1为32位目标,2为64位目标,当初属于预留的,。在这里为32位目标文件00000005:02这位是处理器的编码方式,01表示高位在前,02表示低位在前,0是非法数据编码,对应ARM下的是大端。00000006:01这位是头部版本号00000007-0000000f:610000

14、000000000000标记e_ident中未使用字节的开始。初始化为0。0x10—0x11:0002(为大端格式,后续一样)e_type:2代表可执行文件,1是可重定位的目标文件(gcc–c得到的是这样的文件),而3表示共享目标文件(gcc–shared得到的文件如此),同样,0是指未知的目标文件。其它的值含义如下0x12-0x13:00283是指Intel80386结构,据某篇文档说,ia32的结构上这位是必须指定为EM_386的,即值为3。0x28为ARM0x14-0x17:00000001(大端,对应为1)取1为当前版本E

15、V_CURRENT,取0为非法版本EV_NONE0x18-0x1b:000080d0为程序入口地址,即应用程序最开始执行地址,需要注意的时不会时main,由于编译器链接时会在main之前链接一些其它函数。对应于静态的c程序,入口函数为_start通过以下可以发现,80d0为start函数的起始地址。在glibc-2.3.5/sysdeps/arm/elf/start.S文件里可以找到_start函数的实现:0x1c-0x1f:0000034e_phoff,程序(program)头部偏移量,整好elf头部为52个字节,紧跟在elf头

16、部后面的为程序头描述数据结构。Programheader在linux装载此elf文件时需要用到0x20-0x23:000690f4e_shoff;节(section)头部偏移量,从文件的偏移0x0690f4开始,具体作用待后续研究。0x24-0x2

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

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

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