软件的链接过程详解
软件的链接过程 ——静态链接 2014.8.14 程序构建过程 目标文件的格式 静态链接 地址分配 符号解析 重定位 一个示例 目录 程序构建过程 目标文件格式——三种形式 目标文件(Object Files)有三种形式: 可重定位(Relocatable)目标文件:由编译器和汇编器生成,可以与其他可重定位目标文件合并创建一个可执行目标文件; 可执行(Executable)目标文件:由链接器生成,可以直接被拷贝到内存中执行; 共享(shared)目标文件:一类特殊的可重定位目标文件,可以在加载时或运行时被动态的加载到内存并执行。 目标文件格式——两种视角 目标文件格式——ELF头部 目标文件格式——节 .text:代码(节)段,存放已编译程序的机器代码。 .data:数据(节)段,存放初始化的全局变量。 .bss:数据(节)段,存放未初始化的全局变量。 .rodata:只读数据(节)段,存放只读属性数据。 目标文件格式——符号表 .sym:符号表,存放程序中定义和引用的函数和全局变量信息。 目标文件格式——字符串表 .strtab:字符串表,存放节头部表和符号表中的字符串。 目标文件格式——重定位表 .rel.text:.text节重定位表,存放.text节中符号位置,链接时需要修改这些位置。 .rel.data:.data节重定位表,存放.data节中符号位置,链接时需要修改这些位置。 目标文件格式——节头部表 静态链接——段合并与地址分配 静态链接——符号解析 每个可重定位的目标文件m都有一个符号表,在链接器的上下文中有三种不同的符号: 由m定义的,可以被其他模块引用的全局符号,对应于非静态的函数,以及被定义为不带static属性的全局变量。 由其他模块定义的,被m引用的全局符号,对应于定义在其他模块中的函数和变量。 只被m定义和引用的本地符号,对应于带static属性的函数和全局变量。 注:本地符号和本地程序变量(局部变量)是不同的,.symtab中的符号表不包含本地程序变量的任何符号,这些符号运行时用栈管理。但是带有static属性的本地程序变量是例外,编译器在.data和.bss节中为每个定义分配空间,并在符号表中创建一个有唯一名字的本地符号。 静态链接——符号解析 链接器从左至右的扫描可重定位目标文件以及库文件。在扫描的过程中,链接器维护着3个集合: 即将被合并到可执行目标文件中的目标文件的集合E; 没有解析的符号集合U; 在先前输入的文件中已有定义的符号集合D。 静态链接——符号解析 初始情况下,U、D、E都是空集。然后依据如下算法,依次处理输入文件: 对每一个输入文件f,链接器判断f是一个目标文件还是一个库文件。如果f是一个目标文件,把f加入E,根据f中的符号定义和符号引用更新U和D,然后处理下一个文件。 如果f是库文件,链接器尝试在库文件的成员中寻找U中符号(还没有解析的符号)的定义。如果某个成员m中包含U中某个符号的定义,那么把m加入E,根据m中的符号定义和符号引用更新U和D。重复这一过程直到U和D都不再变化,然后把不在E中的库文件的成员直接丢弃; 当链接器扫描完所有输入文件后,如果U是非空的,则报错并退出;如果U已经是空集,则合并E中的所有目标文件,形成可执行文件。 静态链接——重定位 在链接器完成了符号解析工作之后,每一个符号引用都与一个确定的符号定义相关联起来,链接器也知道了每一个输入模块的代码节和数据节的大小,然后开始重定位过程。 在重定位过程中,链接器将合并所有输入模块,为每个符号分配运行时地址。由两个步骤组成: 重定位节和符号定义。首先将所有输入文件中类型相同的节合并成新的聚合节,然后把运行时内存地址赋给聚合节、输入模块中的每一个节、以及输入模块中定义的每一个符号。 重定位节中的符号引用。链接器修改代码节和数据节中对每一个符号的引用,使它们指向正确的运行时地址,这一步骤依赖于重定位表目(relocation entry)。 静态链接——重定位 foreach section s{ foreach relocation entry r{ refptr = s + r.offset; if ( r.type == R_386_PC32 ) { refaddr = ADDR(s) + r.offset; *refptr = (unsigned) ( ADDR(r.symbol)+*refptr -refaddr); } if ( r.type == R_386_32 ) *refptr = (unsigned) ( ADDR(r.symbol)+*refptr); } } 一个示例 两个源文件main.c和swa
您可能关注的文档
- 轨道板铺设作业指导书(修改稿)详解.doc
- 转基因动物(Transgenicanimals)详解.ppt
- 建筑安装分项工程施工工艺规程-第五分册分解.doc
- 转K5型转向架详解.ppt
- 车身焊接工艺项目五点焊详解.ppt
- 轮疏安全监理细则详解.doc
- 轮胎英语词汇详解.doc
- 轮胎用原材料介绍详解.ppt
- 转载自重中之重详解.ppt
- 轮系-09详解.ppt
- 小区绿化施工协议书.docx
- 墙面施工协议书.docx
- 1 古诗二首(课件)--2025-2026学年统编版语文二年级下册.pptx
- (2026春新版)部编版八年级道德与法治下册《3.1《公民基本权利》PPT课件.pptx
- (2026春新版)部编版八年级道德与法治下册《4.3《依法履行义务》PPT课件.pptx
- (2026春新版)部编版八年级道德与法治下册《6.2《按劳分配为主体、多种分配方式并存》PPT课件.pptx
- (2026春新版)部编版八年级道德与法治下册《6.1《公有制为主体、多种所有制经济共同发展》PPT课件.pptx
- 初三教学管理交流发言稿.docx
- 小学生课外阅读总结.docx
- 餐饮门店夜经济运营的社会责任报告(夜间贡献)撰写流程试题库及答案.doc
最近下载
- 西方经济学(第三版)许纯祯PPT全套课件.pptx
- 山东科技版劳动实践指导手册五年级第8课传统工艺制作我是非遗小传人扎染 课件.ppt
- 分项工程量清单综合单价分析表.xls VIP
- 《智慧养老模式在养老服务中的技术创新与产业协同研究》教学研究课题报告.docx
- 人教版(2024)八年级上册英语Unit 8 Let's Communicate! 教案(共6课时) .pdf
- 3512B柴油机零件手册.pdf VIP
- (新教材)2026年春期教科版二年级下册科学教学计划及进度表.pdf
- BIQS2.0 进阶版学习教材V4.0.pdf VIP
- 作物育种学(刘裕强)第十四章 群体改良与轮回选择.ppt VIP
- 2024茂名市电白区电城镇社区工作者招聘考试试题.docx VIP
原创力文档

文档评论(0)