美文网首页
第七章《链接》(一)

第七章《链接》(一)

作者: ShawnIsACoder | 来源:发表于2018-12-09 20:53 被阅读0次

链接

链接是将各种代码和数据片段收集并组合成为一个单一文件的过程,其可以发生在:

  1. 编译时
  2. 加载时
  3. 运行时

在现代系统中,链接是由链接器自动执行的

静态链接

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

静态连接器通过两个任务完成可执行文件的构造

  • 符号解析:将每个符号的引用正好和每一个符号定义关联起来
  • 重定位:通过把每个符号定义与一个内存位置关联起来,从而重定位这些节,然后修改所有对这些符号的引用,使得它们指向内存位置

目标文件

包含三种形式:

  • 可重定位目标文件:包含二进制代码和数据,其形式可以在编译时与其他可重定位文件合并起来,创建一个可执行目标文件
  • 可执行目标文件:包含二进制代码和数据,其形式可以被直接复制到内存并执行
  • 共享目标文件:一种特殊类型的重定位目标文件,可以在加载或者运行时被动态的加载进内存并连接

可重定位目标文件

一个典型的ELF可重定位目标文件如下:

典型的可重定位目标文件.png
  • .text:已编译程序的机器码
  • .rodata:只读数据
  • .data:已初始化的全局和静态C变量
  • .bss:未初始化的全局和静态C变量,以及所有被初始化为0的全局或静态变量
  • .symtab:符号表,存放在程序中定义和引用函数和全局变量的信息
  • .rel.text:一个.text节中位置的列表,当链接器把这个目标文件和其它文件组合时,需要修改这些位置
  • .rel.data:被模块引用或定义的所有全局变量的重定位信息
  • .debug:调试符号表
  • .line:原始C源程序中的行号和.text节中机器指令之间的映射
  • .strtab:字符串表

相关文章

  • 第七章《链接》(一)

    链接 链接是将各种代码和数据片段收集并组合成为一个单一文件的过程,其可以发生在: 编译时 加载时 运行时 在现代系...

  • python通用编程系列

    本系列用于python通用编程作业。 第七章函数对象深度之眼链接:第七章函数对象作业如下:

  • 第七章-链接(2)

    可执行目标文件 可执行目标文件还包括了程序的入口点,即第一条指令的地址。各个段会被映射到连续的内存区域,段头部表描...

  • 第七章-链接(1)

    链接(linking) 链接是将各种代码和数据片段收集并组合成为一个单一文件的过程,这个文件可被加载到内存并执行。...

  • 一起读《小王子》 | 第七章生词与解析

    本篇为《小王子》第七章的解析,需要阅读原文的请下载阅读或者直接点击下方链接阅读第七章的在线版本:一起读《小王子》 ...

  • 深入理解计算机系统-第七章(链接)笔记

    深入理解计算机系统-第七章(链接)笔记 背景 链接是将各种代码和数据部分收集起来并组合成为一个单一文件的过程 这个...

  • 《深入理解计算机系统》

    第七章 链接 源文件-->编译器-->目标文件:可重定位目标文件(a),可执行目标文件(b),共享目标文件(c) ...

  • 美人鲤 第8章 完蛋

    《美人鲤》总目录链接 上一章 第七章 变身 老渔民抚摸着大鱼蛋,双目闪冒金光,欢喜得双手发抖的...

  • 《自我之书》第七章:构建理想自我,链接未来的憧憬

    《自我之书》第七章:构建理想自我,链接未来的憧憬 1、未来,我想 成为怎样的人? (1)、生理状态。目前来说,我已...

  • 零极限8

    第七章 本书一直在探讨神性,当我链接到我自己的神性或者生命力时,我就能更有力量,更有智慧,更加绽放!

网友评论

      本文标题:第七章《链接》(一)

      本文链接:https://www.haomeiwen.com/subject/sngkhqtx.html