版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
杨森2023/6/4C++程序链接过程简介编译器与链接器目标文件静态链接动态链接常用工具介绍2023/6/4大纲编译器与链接器目标文件静态链接动态链接常用工具介绍2023/6/4大纲2023/6/4被隐藏的过程#include<stdio.h>intmain(){printf(“helloworld\n”);
return
0;}hello.cca.outGCC2023/6/4被隐藏的过程SourceCodehello.cHeaderFilesstdio.h…Processing(cpp)Preprocessedhello.iCompilation(cc1plus)Assemblyhello.sAssembly(as)ObjectFilehello.oStaticLibrarylibc.aLinking(ld)Executablea.out2023/6/4链接器的产生很久很久以前,在一个非常遥远的银河系……人们编写程序时,将所有源代码都写在同一个文件中,发展到后来一个程序源代码的文件长达数百万行,以至于这个地方的人类已经没有能力维护这个程序了。人们开始寻找新的办法,一场新的软件开发革命即将爆发……2023/6/4链接器的产生0000101001…2…3…4100001115…jmpfoo0000101011…2…3…4…5100001116…符号重定位2023/6/4链接器的产生………xxxxxx…地址和空间分配符号决议重定位编译器与链接器目标文件静态链接动态链接常用工具介绍2023/6/4大纲编译器编译源代码后生成的文件(.obj.o)目标文件和可执行文件的结构是一样的常见格式:PE(PortableExecutable),ELF(ExecutableLinkableFormat),.COM静态链接库2023/6/4什么是目标文件2023/6/4ELF文件分类ELF文件类型说明实例可重定位文件(RelocatableFile)这类文件包含了代码和数据,可以被用来链接成可执行文件或共享目标文件,静态链接库也可以归为这一类Linux的.oWindows的.obj可执行文件(ExecutableFile)这类文件包含了可以直接执行的程序,它的代表就是ELF可执行文件/bin/bashWindows的.exe共享目标文件(SharedObjectFile)这种文件包含了代码和数据,既可以链接成为新的目标文件,也可以链接成为可执行文件Linux的.soWindows的DLL核心转储文件(CoreDumpFile)当系统以外终止时,系统可以将该进程的地址空间的内容及终止时的一些其他信息转储到核心转储文件Linux下的coredump2023/6/4目标文件的结构FileHeader.textsection.datasection.bsssectionintglobal_init_var=84;intglobal_uinit_var;voidfunc1(inti){printf("%d\n",i);}intmain(void){staticintstatic_var=85;staticintstatic_var2;inta=1;
intb;func1(global_init_var+static_var+a+b);
return
0; }为什么要将数据和代码分开存放?文件头(/usr/include/elf.h):ELF魔数、文件机器字节长度、数据存储方式、版本、运行平台、ABI版本、ELF重定位类型……段表(e_shoff):段名(sh_name),段类型(sh_type),标志位(sh_flag),链接信息(sh_link,sh_info)……重定位表字符串表2023/6/4目标文件的结构偏移+0+1+2+3+4+5+6+7+8+9+0\0helloworl+10d\0Myvariab+20le\0偏移字符串0空字符串1helloworld6world12Myvariable将函数和变量统称为符号本地定义的全局符号、外部符号(ExternalSymbol)、局部符号、段名、行号符号修饰和函数签名弱符号和强符号extern“C”2023/6/4链接的接口——符号编译器与链接器目标文件静态链接动态链接常用工具介绍2023/6/4大纲2023/6/4空间与地址分配FileHeader.textsection.datasection.bsssectionObjectFileAFileHeader.textsection.datasection.bsssectionObjectFileBFileHeader.textsection.datasection.bsssectionOuputFileFileHeader.textsection.datasection.bsssectionObjectFileAObjectFileB2023/6/4空间与地址分配FileHeader.textsection.datasection.bsssectionObjectFileAFileHeader.textsection.datasection.bsssectionObjectFileBFileHeaderOuputFile.text.data.bss2023/6/4符号解析与重定位/*a.c*/externintshared;intmain(){inta=100;swap(&a,&shared);}/*b.c*/intshared=1;voidswap(int*
a,int*b){*a^=*b^=*a^=*b;}$lda.oa.o:Infunction`main`:a.c:(.text+0x1c):undefinedreferenceto`shared`a.c:(.text+0x27):undefinedreferenceto`swap`$readelf-sa.oSymboltable‘.symtab’contains10entries:
Num:ValueSizeTypeBindVisNdxName
8:000000000NOTYPEGLOBALDEFAULTUNDshared2023/6/4符号解析与重定位/*a.c*/externintshared;intmain(){inta=100;swap(&a,&shared);}/*b.c*/intshared=1;voidswap(int*
a,int*b){*a^=*b^=*a^=*b;}$objdump–oa.o26:e8fcffffffcall27<main+27>2b:80480ba:e809000000call80480c8<swap>80480bf指令地址修正链接器无法处理多个符号定义类型不一致的情况(三种情况)编译器将未初始化的全局变量定义作为弱符号处理针对弱符号当不同目标文件需要的COMMON块空间大小不一致时,以最大块为准若有强符号,以强符号为准若有弱符号空间大于强符号,有警告2023/6/4COMMON块ld:warning:alignment4ofsymbol`global`ina.oissmallerthan8inb.o重复代码消除函数级别链接(VS:/GyGCC:-ffunction-sections)全局构造与析构(.init.fini)
ABI:ApplicationBinaryInterface2023/6/4C++相关问题一组目标文件的集合(arlib.exe)2023/6/4静态库链接hello.olibc.aprintf.ovfprintf.ostdio.oOther.ofilesLinkerExcutableProgram一组目标文件的集合(arlib.exe)2023/6/4静态库链接C运行库相关DLL描述Libcmt.lib多线程静态库Msvcrt.libMsvcr90.dll多线程动态库Libcmtd.lib多线程静态调试库Msvcrtd.libMsvcr90d.dll多线程动态调试库编译器与链接器目标文件静态链接动态链接常用工具介绍2023/6/4大纲内存和磁盘空间程序开发和发布程序可扩展性与兼容性(插件)DLLHELLld-2.6.so2023/6/4为什么要动态链接装载时重定位(-shared):无法共享指令地址无关代码(-fPIC):Position-independentCode模块内部的函数调用、跳转模块内部的数据访问模块外部的函数调用、跳转模块外部的数据访问2023/6/4地址无关代码staticinta;externintb;externvoidext();voidbar(){a=1;
b=2;}voidfoo(){bar();ext();}Type2Type4Type1Type32023/6/4地址无关代码ProcessVirtualSpace.textGOT(Globaloffsettable).data.text.dataIntb=1000x20002000……0x100000000x20002000…Bootstrap动态链接器不能依赖于任何共享对象动态链接器所需全局和静态变量由自己重定位装载共享对象全局符号表遍历依赖重定位和初始
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《砌体结构章》课件
- 《电压比较器的应用》课件
- 单位管理制度合并选集【人力资源管理篇】十篇
- 单位管理制度分享汇编人力资源管理篇
- 单位管理制度呈现合集人力资源管理篇
- 寒假自习课 25春初中道德与法治八年级下册教学课件 第三单元 第五课 第3课时 基本经济制度
- 《员工考绩计算》课件
- 中国风国潮风古风模板120
- 2013年高考语文试卷(福建)(空白卷)
- 建材行业会计资金运作监督工作总结
- 餐饮店购销合同
- 文化资源数字化技术有哪些
- 2023年杭州联合银行校园招聘笔试历年高频考点试题答案详解
- 灌装轧盖机和供瓶机设备验证方案
- 《国家中药饮片炮制规范》全文
- 《钴鉧潭西小丘记》教学设计(部级优课)语文教案
- 人教版五年级下册数学讲义
- 安全工器具-变压器绝缘油课件
- 瓦楞纸箱工艺流程演示文稿
- 神通数据库管理系统v7.0企业版-3概要设计说明书
- 安置房项目二次结构砖砌体工程专项施工方案培训资料
评论
0/150
提交评论