百色金融新闻网
您的位置:百色金融新闻网 > 财经要闻 > 「精」程序链接知多少 <csapp>-友情链接代码

「精」程序链接知多少 <csapp>-友情链接代码

作者:百色金融新闻网日期:

返回目录:财经要闻

最新资讯《「精」程序链接知多少 <csapp>-友情链接代码》主要内容是友情链接代码,链接,就是将不同部分代码和数据收集和组合成一个单一文件的过程,这个文件可被加载到存储器并执行。链接可以被执行于编译时,也就是在源代码被翻译成机器代码时;亦可以被执行于加载时,也就是程序白加载器加载到存储器并执行时;还可以被执行于运行时,由引用程序来执行。,现在请大家看具体新闻资讯。

「精」程序链接知多少 &lt;csapp&gt;

链接,就是将不同部分代码和数据收集和组合成一个单一文件的过程,这个文件可被加载到存储器并执行。

链接可以被执行于编译时,也就是在源代码被翻译成机器代码时;亦可以被执行于加载时,也就是程序白加载器加载到存储器并执行时;还可以被执行于运行时,由引用程序来执行。现代系统中,链接是由叫做链接器的程序来自动执行的。

1.静态链接

静态链接,以一组可重定位目标文件和命令行参数作为输入,产生一个完全链接的可以加载和运行的可执行目标文件作为输出。

为创建可执行文件,链接器必须完成两个主要任务:

#符号解析。目标文件定位和引用符号。符号解析的目的是将每个符号引用和一个符号定义联系起来。

#重定位。编译器和汇编器生成从地址零开始的代码和数据节。链接器通过把每个符号定义与一个存储器位置联系起来,然后修改所有对这些符号的引用,使得它们指向这个存储器位置,从而重定位这些节。

2.目标文件

目标文件有三种形式:可重定位目标文件、可执行目标文件、共享目标文件。

3.可重定位目标文件

一个典型的可重定位目标文件包好下面几个节:

#.text 已编译程序的机器代码

#.rodata 只读数据,比如printf语句中的格式串和开关语句的跳转表

#.data 已初始化的全局C变量。局部C变量在运行时被保存在栈中

#.bss 未初始化的全局C变量。在目标文件中这个节不占实际的空间,它仅仅是一个占位符。

#.symtab 一个符号表,它存放在程序中被定义和引用的函数和全局变量的信息。这个编译器中的符号表不同。

#.rel.text 当链接器把这个目标文件和其他文件结合时,.text节中的许多位置都需要修改。一般而言,调用外部函数和引用全局变量的指令需要修改。调用本地函数的指令不需要修改。

#.rel.data 被模块定义或引用的任何全局变量的信息。一般而言,任何已初始化的全局变量的初始化值是全局变量或外部定义函数的地址都需要被修改。

#.debug 一个吊事符号表,其有些表目是程序中定义的局部变量和类型定义,有些表目是程序中引用和定义的全局变量,有些事原始C源文件。

#.line 原始C程序中的行号和.text节中机器指令之间的映射。

#.strtab 一个字符串表,其中包括.symtab和.debug节中的符号表,以及头部中的节名字。

4.符号和符号表

每个可重定位目标模块m都有一个符号表,它包含m所定义和引用的符号的信息。在链接器上下文中,有三种不同的符号:

#由m定义并被能被其他模块引用的全局符号。全局链接器符号对应于非静态的C函数以及被定义不带C的static属性的全局变量。

#由其他模块定义并被m引用的全局符号。这些符号称为外部符号,对应于定义在其他模块中的C函数和变量。

#只被模块m定义和引用的本地符号。本地链接器符号对应于带static属性的C函数和全局变量。

5.符号解析

链接器解析符号引用的方法是将每一个引用于它输入的可重定位目标文件的符号表中的一个确定的符号定义联系起来。

友情提醒各位捧场的朋友一句:

「精」程序链接知多少 &lt;csapp&gt;

想看更多,那就关注喽,大家不喜可喷~

相关阅读

  • Ic卡与射频卡的区别-车主卡

  • 百色金融新闻网理财保险
  • 车主卡,Ic卡、Rfid,大家一定不会陌生了。其频率与读写器发射的频率相同,这样在电磁波激励下,LC谐振电路产生共振,从而使电容内有了电荷。
关键词不能为空

经济新闻_金融新闻_财经要闻_理财投资_理财保险_百色金融新闻网