计算机组成原理06——程序的链接

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)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一直饿着肚子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值