elf文件格式及可执行程序的加载与执行 - elastosorg.pptVIP

elf文件格式及可执行程序的加载与执行 - elastosorg.ppt

  1. 1、本文档共63页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
elf文件格式及可执行程序的加载与执行 - elastosorg

ELF文件格式及可执行程序的加载与执行 梁峰 0420080247 郑锟 0420080250 梁云 0420080253 简介 ELF文件格式 静态链接 可执行目标文件 共享目标文件 可执行目标文件的加载过程 ELF文件格式 可重定位(relocatable)目标文件 可执行(executable)目标文件 共享(shared)目标文件 可重定位(relocatable)目标文件 由gcc – c x.c生成。 包含二进制代码和数据,其形式可以在链接时与其它可重定位目标文件合并起来,创建一个可执行目标文件或共享目标文件。 可执行(executable)目标文件 由gcc x.o或ld x.o生成。 包含二进制代码和数据,其形式可以由加载器加载到储存器并执行。 共享(shared)目标文件 由gcc –shared x.o或ld –shared x.o生成。 一种特殊类型的可重定位目标文件,可以加载或者运行时,被动态的加载到储存器并链接。 三种目标文件的关系 重要的数据结构(elf.h) Elf32_Ehdr,ELF头,描述elf文件的目标机器和总体信息。 Elf32_Shdr,节头部表项,描述文件中的节信息。 Elf32_Sym,符号表项,描述符号表中的符号信息。 Elf32_Rel,重定位表项,描述重定位表中重定位项的信息。 Elf32_Phdr,段头部表项,描述文件中的节如何加载到储存器。 静态连接 由静态连接器(ld)完成,将一个或多个可重定位目标文件链接成为一个可执行目标文件或共享目标文件。 主要工作: 符号解析(symbol resolution) 目标文件中定义符号,同时还会引用自己或者其它目标文件定义的符号。符号解析的目的就是将每一个符号引用和符号定义联系起来。 重定位(relocation) 编译器和汇编器产生从地址零开始的代码和数据节(gcc –c生成的.o文件)。连接器通过把每个符号定义与一个储存器位置联系起来,然后修改所有对这些符号的引用,使得它们指向这个储存器位置,从而重定位这些节。 可重定位目标文件格式 ELF头:系统信息(字节顺序等)和目标文件的信息。 节:并不规定节的内容和排列,但通常某个版本gcc生成的节是固定的。 节头部表:用来定位节,说明节的类型(如程序数据节、符号表节、重定位信息节、字符串节等等) 目标文件中节的定位 符号表 符号表描述了在可重定位目标文件中定义和引用的函数和全局变量的信息。 对符号表的访问是链接器解析符号名字的关键。 重定位 链接器将所有参与链接的目标文件的同类型节(如.text节)合并为同一节,这时定义在目标文件中的符号就可以分配给一个唯一的运行时地址。 根据重定位表(.rel.text和.rel.data节)中的信息重定位目标文件中对符号的引用。 重定位算法 32位绝对地址重定位 32位PC相关地址重定位 关于PC相关重定位的进一步说明 可执行目标文件 可执行目标文件格式类似于可重定位目标文件,但是为了便于可执行文件被加载到内存,添加了段头表。 由于可执行目标文件中对符号的引用都已进行了重定位,所以相应的.rel节都被移去了。 可执行目标文件被加载后的虚拟储存器映像 共享目标文件 共享目标文件又称为共享库(shared library)。在运行时,可以加载到任意的存储器地址,并在存储器中和用户程序链接起来。 使用gcc -shared生成,-fPIC可以生成位置无关的代码。 在Linux系统上,共享库一般为.so文件 共享目标文件(续) 当目标文件和共享库一起编译时就能生成使用共享库的可执行程序。 对于使用共享库的可执行程序,文件中会有一个.interp节,该节包含了动态链接器的路径。 加载器将控制传递给动态链接器而不是程序,动态链接器完成共享库的重定位。 最后,将控制传递给应用程序。 共享目标文件(续) Linux支持在程序中调用dlopen系列函数(类似于Win32平台下的LoadLibrary)手工加载共享库。 参考文献 Executable and Linking Format (ELF) Specification Version 1.2 Randal E. Bryant, David O’ Hanllaron, Computer Systems A Programmer’s Perspective Daniel P. Bovet, Marco Cesati, Understanding the Linux Kernel 毛德操, 胡希明, Linux内核源代码情景分析 谢谢大家! st_other st_info st_size st_shndx st_value st_name Elf32_Sym 保留,目前无意义。

文档评论(0)

yanpizhuang + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档