- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
c程序链接过程简介
杨森2016-12-7C++程序链接过程简介编译器与链接器目标文件静态链接动态链接常用工具介绍2016-12-7大纲编译器与链接器目标文件静态链接动态链接常用工具介绍2016-12-7大纲2016-12-7被隐藏的过程#includestdio.hintmain(){printf(“helloworld\n”);return0;}hello.cca.outGCC2016-12-7被隐藏的过程SourceCodehello.cHeaderFilesstdio.h…Processing(cpp)Preprocessedhello.iCompilation(cc1plus)Assemblyhello.sAssembly(as)ObjectFilehello.oStaticLibrarylibc.aLinking(ld)Executablea.out2016-12-7链接器的产生很久很久以前,在一个非常遥远的银河系……人们编写程序时,将所有源代码都写在同一个文件中,发展到后来一个程序源代码的文件长达数百万行,以至于这个地方的人类已经没有能力维护这个程序了。人们开始寻找新的办法,一场新的软件开发革命即将爆发……2016-12-7链接器的产生0000101001…2…3…4100001115…jmpfoo0000101011…2…3…4…5100001116…符号重定位2016-12-7链接器的产生………xxxxxx…地址和空间分配符号决议重定位编译器与链接器目标文件静态链接动态链接常用工具介绍2016-12-7大纲编译器编译源代码后生成的文件(.obj.o)目标文件和可执行文件的结构是一样的常见格式:PE(PortableExecutable),ELF(ExecutableLinkableFormat),.COM静态链接库2016-12-7什么是目标文件2016-12-7ELF文件分类ELF文件类型说明实例可重定位文件(RelocatableFile)这类文件包含了代码和数据,可以被用来链接成可执行文件或共享目标文件,静态链接库也可以归为这一类Linux的.oWindows的.obj可执行文件(ExecutableFile)这类文件包含了可以直接执行的程序,它的代表就是ELF可执行文件/bin/bashWindows的.exe共享目标文件(SharedObjectFile)这种文件包含了代码和数据,既可以链接成为新的目标文件,也可以链接成为可执行文件Linux的.soWindows的DLL核心转储文件(CoreDumpFile)当系统以外终止时,系统可以将该进程的地址空间的内容及终止时的一些其他信息转储到核心转储文件Linux下的coredump2016-12-7目标文件的结构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);return0; }为什么要将数据和代码分开存放?文件头(/usr/include/elf.h):ELF魔数、文件机器字节长度、数据存储方式、版本、运行平台、ABI版本、ELF重定位类型……段表(e_shoff):段名(sh_name),段类型(sh_type),标志位(sh_flag),链接信息(sh_link,sh_info)……重定位表字符串表2016-12-7目标文件的结构偏移+0+1+2+3+4+5+6+7+8+9+0\0helloworl+10d\0Myvariab+20le\0偏移字符串0空字符串1helloworld6world12Myvariable将函数和变量统称为符号本地定义的全局符号、外部符号(ExternalSymbol)、局部符号、段名、行号符号修饰和函数签名弱符号和强符号extern“C”2016-12-7链接的接口——符号编译器与链接器目标文件静态链接动态链接常用工具介绍2016-12-7大纲2016-12-7空间与地址分配FileHeader.textsection.datasection.bsssectionObjectFileAFileHeader.textsection.datasection.bsssectionObjectFileBFileHeader.textsection.datasection.bsssectionOuputFileFileHeader.textsect
文档评论(0)