大家好,关于源码分享下载文档翻译网站推荐很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于翻译公司网站源码的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮助!
链接,就是将不同部分代码和数据收集和组合成一个单一文件的过程,这个文件可被加载到存储器并执行。
链接可以被执行于编译时,也就是在源代码被翻译成机器代码时;亦可以被执行于加载时,也就是程序白加载器加载到存储器并执行时;还可以被执行于运行时,由引用程序来执行。现代系统中,链接是由叫做链接器的程序来自动执行的。
1.静态链接
静态链接,以一组可重定位目标文件和命令行参数作为输入,产生一个完全链接的可以加载和运行的可执行目标文件作为输出。
为创建可执行文件,链接器必须完成两个主要任务:
重定位。编译器和汇编器生成从地址零开始的代码和数据节。链接器通过把每个符号定义与一个存储器位置联系起来,然后修改所有对这些符号的引用,使得它们指向这个存储器位置,从而重定位这些节。
2.目标文件
目标文件有三种形式:可重定位目标文件、可执行目标文件、共享目标文件。
3.可重定位目标文件
一个典型的可重定位目标文件包好下面几个节:
.rodata只读数据,比如printf语句中的格式串和开关语句的跳转表
.bss未初始化的全局C变量。在目标文件中这个节不占实际的空间,它仅仅是一个占位符。
.rel.text当链接器把这个目标文件和其他文件结合时,.text节中的许多位置都需要修改。一般而言,调用外部函数和引用全局变量的指令需要修改。调用本地函数的指令不需要修改。
.debug一个吊事符号表,其有些表目是程序中定义的局部变量和类型定义,有些表目是程序中引用和定义的全局变量,有些事原始C源文件。
.strtab一个字符串表,其中包括.symtab和.debug节中的符号表,以及头部中的节名字。
4.符号和符号表
每个可重定位目标模块m都有一个符号表,它包含m所定义和引用的符号的信息。在链接器上下文中,有三种不同的符号:
由其他模块定义并被m引用的全局符号。这些符号称为外部符号,对应于定义在其他模块中的C函数和变量。
#只被模块m定义和引用的本地符号。本地链接器符号对应于带static属性的C函数和全局变量。
5.符号解析
链接器解析符号引用的方法是将每一个引用于它输入的可重定位目标文件的符号表中的一个确定的符号定义联系起来。
友情提醒各位捧场的朋友一句:
想看更多,那就关注喽,大家不喜可喷~
OK,本文到此结束,希望对大家有所帮助。
