读《程序员的自我修养》有感---编译&静态连接

    编译型的语言程序,须要通过大致的编译、连接、装载三个步骤,也就是源代码->机器指令(文件),单独的指令文件(带有符号引用)->总体的指令文件(符号已解析),指令文件->实例进程三个过程,这是概略的说。下图能够给出一个稍微具体的过程概览函数

    在汇编以后,获得一个目标文件(obj,.o格式),大致如图所示因为每一个编译获得的目标文件都或多或少地有引用到外部文件符号(变量/函数等),因此在目标文件中此时符号的地址仍是待定状态(由0x00000000或者其余当即数代替),而静态连接就是将各个目标文件整合并肯定各个待定符号的具体地址,从而成为可执行文件。具体分为两个关键步骤:进程

  1. 空间与地址分配:扫描全部的输入目标文件,得到他们各个段的长度、属性和位置,以后合并相同段,计算出新段的长度和位置,而且将全部符号表合并为一个全局符号表
  2. 符号解析与重定位:使用第一步收集到的信息,读取输入目标文件中的重定位信息,进行符号解析与重定位、调整代码中的地址等(地址分为绝对和相对)
相关文章
相关标签/搜索