链接器

✍ dations ◷ 2025-12-07 05:25:03 #程序设计工具,编译器软件

链接器(英语:Linker),又译为链接器、连结器,是一个程序,将一个或多个由编译器或汇编器生成的目标文件外加库,链接为一个可执行文件。

在IBM大型主机比如OS/360(英语:OS/360)上,链接器是linkage editor;在Unix-like系统上常用的链接器是GNU ld(英语:GNU linker)。目标文件是包括机器码和链接器可用信息的程序模块。简单的讲,链接器的工作就是解析未定义的符号引用,将目标文件中的占位符替换为符号的地址。链接器还要完成程序中各目标文件的地址空间的组织,这可能涉及重定位工作。

大多数现代操作系统都提供动态链接(英语:Dynamic linking)和静态链接(英语:Static linking)两种形式。

增量链接(Incremental Linking),是针对大型软件的源代码的很小改动就需要花费很长时间全部重新链接问题。特别是程序开发时,不可避免地要不断修改、重新编译、链接、调试程序,链接的耗时大大影响了编程者工作效率。解决办法是:所有函数不再首尾紧挨着存放在内存地址空间,而是在函数之间加上padding区域作为间隔,为函数添加几句指令稍微变长留有余地。只要函数的代码改动不大,没有超过原padding所占的空间,链接器只需延长该函数自身,这大大提高了链接的速度。还可以在可执行文件的整个.text节末尾设置一个较大的padding区域,或者使用.textbss节,用来存放修改后变大很多的函数。为了解决由此带来的函数入口地址需要重定位,在.text节中增加ILT表(Incremental Linking Table),所有的函数调用都是通过间接跳转(jum)指令实现,因此函数地址改变仅需要修改ILT表。

Visual Studio在Debug模式下具有动态编译链接功能,也即“Edit and Continue”功能。一个函数在Visual Studio中设断点或单步调试,这时该函数在.text节中;修改源代码后继续执行该函数,Visual Studio会重新编译该函数并把它加载到.textbss节中的未利用地址空间(原为padding的部分),并修改对该函数调用时跳转所用的ILT表条目以及当前EIP寄存器值。

相关

  • 几何几何学(英语:Geometry,古希腊语:γεωμετρία)简称几何。几何学是数学的一个基础分支,主要研究形状、大小、图形的相对位置等空间区域关系以及空间形式的度量。许多文化中都
  • 舒张压血压是指血管内的血液在单位面积上的侧压力,即压强。习惯以毫米汞柱(mmHg)为单位。而动脉血压则指的是血液对动脉血管的压力,一般指主动脉压。而平均血压则是 = (收缩压+ 2 x 舒
  • FeFsub2/sub氟化亚铁,为铁的一种氟化物,其化学式为FeF2。氟化亚铁可以以无水形式或水合物态FeF2.4H2O(CAS 号 13940-89-1)存在。氟化亚铁具有TiO2金红石结构。
  • 薄荷详见内文薄荷属(学名:Mentha),为唇形科的一属,包含25个种,其中辣薄荷(M. × piperita)及留兰香(M. spicata)为最常见的品种。最早期于欧洲地中海地区及西亚一带盛产。现时主要产地为美
  • 尾节尾节(英语:Telson),又称尾柄,为节肢动物身体分节的最末节,没有附肢也没有神经节,因此并不是真正的体节。不同类群的节肢动物其尾节的形状与用途不尽然相同。海螯虾、真虾下目与其他
  • SEC东南联盟(Southeastern Conference,SEC),是美国南部及中西部的一个大学运动联盟,属于NCAA第一级别,而在美式橄榄球项目中则属于美式足球碗赛分区。全项目成员包括有:
  • 2,2'-联苯二甲酸2,2'-联苯二甲酸是一种有机化合物,化学式为(C6H4CO2H)2。它是白色固体,实验室里可通过邻氨基苯甲酸和重氮盐的反应来制备。它也是菲在微生物作用下的产物。它经过反应可以得到
  • 南大西洋异常区南大西洋异常区(South Atlantic Anomaly)是地球上一片地磁最弱的区域,覆盖范围遍及南美洲南部及南大西洋海域。由于该区的地磁较其他地区弱,阻挡太阳粒子的范艾伦辐射带在该区
  • 马拉盖塔椒马拉盖塔椒 (学名: var. )是一种产于巴西巴伊亚州的一种辣椒 (注意不要与姜科的天堂椒 )混淆。此种果实未熟绿色,成熟时转红,长2英寸。辣度为60,000 至 100,000史高维尔单位。常用
  • 绿肥绿肥即可以翻犛入土壤中作为肥料或改良土壤的植物,这包括其种子和植物本身。印度农民数千年来都了解绿色肥料的价值。在古希腊,农民也将蚕豆种植在土壤中。千年以前的中国农业