第四章程序的链接详解.ppt

  1. 1、本文档共94页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第四章 程序的链接 目标文件格式 符号解析与重定位 共享库与动态链接;可执行文件的链接生成;程序的链接;一个典型程序的转换处理过程;;;使用链接的好处;一个C语言程序举例;可执行文件的生成;链接过程的本质;目标文件;可执行文件的存储器映像;链接操作的步骤;链接操作的步骤;三类目标文件 ;目标文件的格式;Executable and Linkable Format (ELF);链接视图—可重定位目标文件;可重定位目标文件格式; switch-case语句举例;ELF头(ELF Header);ELF头信息举例;节头表(Section Header Table);节头表信息举例;节头表信息举例;执行视图—可执行目标文件;可执行目标文件格式;ELF头信息举例;可执行文件的存储器映像;可执行文件中的程序头表;可执行文件中的程序头表;可执行文件的存储器映像;程序的链接;符号和符号解析;符号和符号解析;目标文件中的符号表;目标文件中的符号表;符号解析(Symbol Resolution);全局符号的符号解析;全局符号的符号解析;链接器对符号的解析规则;多重定义符号的解析举例;多重定义符号的解析举例;多重定义符号的解析举例;多重定义符号的解析举例;多重定义全局符号的问题;如何划分模块?;静态共享库;静态库的创建;常用静态库;自定义一个静态库文件;链接器中符号解析的全过程 ;链接器中符号解析的全过程 ;链接器中符号解析的全过程 ;使用静态库;链接顺序问题;链接操作的步骤;目标文件;重定位;重定位信息;重定位操作举例;重定位操作举例;符号引用的地址需要重定位;int buf[2]={1,2}; int main() { swap(); return 0; } ;main.o中的符号表;R_386_PC32的重定位方式;确定定义符号的地址;R_386_32的重定位方式;swap.o中的符号表;R_386_32的重定位方式;swap.o重定位;swap.o重定位main: 8048380: 55 push %ebp 8048381: 89 e5 mov %esp,%ebp 8048383: 83 e4 f0 and $0xfffffff0,%esp 8048386: e8 09 00 00 00 call 8048394 swap 804838b: b8 00 00 00 00 mov $0x0,%eax 8048390: c9 leave 8048391: c3 ret 8048392: 90 nop 8048393: 90 nop;可执行文件的存储器映像;回顾:可执行文件中的程序头表;程序头(段头)表的信息;可执行文件的加载;ELF文件信息举例;程序的链接;动态链接的共享库(Shared Libraries) ;共享库(Shared Libraries);自定义一个动态共享库文件;加载时动态链接 ;加载时动态链接;运行时动态链接;位置无关代码(PIC);(1) 模块内部函数调用或跳转;(2) 模块内部数据引用;(3) 模块外数据的引用;(4) 模块间调用、跳转;方法二:延迟绑定 GOT是.data节一部分,开始三项固定,含义如下: GOT[0]为.dynamic节首址,该节中包含动态链接器所需要 的基本信息,如符号表位置、重定位表位置等; GOT[1]为动态链接器的标识信息 GOT[2]为动态链接器延迟绑定代码的入口地址 调用的共享库函数都有GOT项,如GOT[3]对应ext PLT是.text节一部分,结构数组,每项16B,除PLT[0] 外,其余项各对应一个共享库函数,如PLT[1]对应ext PLT[0] 0804833c: ff 35 88 95 04 08 pushl 0x8049588 8048342: ff 25 8c 95 04 08 jmp *0x804958c 8048348: 00 00 00 00 PLT[1] ext 用 ID=0 标识ext()函数 0804834c: ff 25 90 95 04 08 jmp *0x8049590 8048352: 68 00 00 00 00 pushl $0x0 8048357: e9 e0 ff ff ff

文档评论(0)

shuwkb + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档