我是靠谱客的博主 优美黄蜂,最近开发中收集的这篇文章主要介绍计算机组成原理06——程序的链接ELF和静态链接,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

ELF和静态链接

编译、链接和装载:拆解程序执行

“C语言代码——汇编代码——机器码”这个过程在计算机上是又两部分组成的。

第一部分由编译、汇编、链接三个阶段组成。链接器——把多个目标文件以及调用的各种函数库链接起来。三个阶段完成后,我们生成了可执行文件。(编译生成的是目标文件

第二部分通过装载器把可执行文件装载到内存中,CPU从内存中读取指令和数据,来开始真正执行程序。

在这里插入图片描述

ELF格式和链接:理解链接过程

程序最终通过装载器变成指令和数据。

在Linux下,可执行文件和目标文件所使用的是ELF(Execuatable and Linkable File Format)的文件格式,也叫可执行与可链接文件格式,里面不仅存放了汇编指令,还有很多其他数据。

ELF文件格式:

  1. File Header,基本的头文件,用来表示这个文件的基本属性,例如是否是可执行文件,对应的CPU、操作系统等等。
  2. .text Section,也叫代码段或者指令段,用来保存程序的代码和指令。
  3. .data Section,也叫做数据段,保存程序里设置好的初始化数据。
  4. .rel.text Section,也叫重定位表,保留了没有链接之前哪些跳转地址是不知道的信息。
  5. .symtab Section,也叫符号表,保留了当前文件定义的函数名称和对应地址。

链接器执行过程:

链接器扫描所有输入的目标文件,然后把所有符号表整合成一个全局的符号表。再根据重定位表,把所有不确定的地址从符号表里找到后修正。最后把所有目标文件的对应的Section一次性合并,变成最终的可执行代码。

在这里插入图片描述

同样一个程序在Linux下可以执行而在Windows下不可以执行,就是因为两个操作系统下可执行文件的格式不一样。LInux下是ELF,Windows下是PE(Portable Executable Format)。

最后

以上就是优美黄蜂为你收集整理的计算机组成原理06——程序的链接ELF和静态链接的全部内容,希望文章能够帮你解决计算机组成原理06——程序的链接ELF和静态链接所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(53)

评论列表共有 0 条评论

立即
投稿
返回
顶部