链接器

✍ dations ◷ 2025-10-05 11:25:33 #程序设计工具,编译器软件

链接器(英语: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寄存器值。

相关

  • 异养异营生物(英语:heterotroph)指不能直接以无机物或有机物,必须摄取现成的养分来维持生存机能的生物。异营生物包括捕食、寄生和腐生三种。 异营性动物细胞需要的物质为水和矿物质
  • 阿法埃娅神庙阿法埃娅神庙(希腊语:Ναός Αφαίας)是位于希腊埃伊纳岛的一座古希腊时期的神庙。这座神庙献给生产女神阿法埃娅,是希腊重要的神庙遗迹。
  • 医师誓言希波克拉底誓词(希腊语:Όρκος του Ιπποκράτη,英语:Hippocratic Oath),俗称医师誓词,是西方医生传统上行医前的誓言,希波克拉底乃古希腊医者,被誉为西方“医学之父”
  • 水历水历是水族特有的历法。现行水历与夏历大体一致,主要区别在于水历建戌,以夏历九月为岁首。水历起初是一种物候历(自然历)。水族先民通过观察气象变化、候鸟迁栖等自然现象来预测
  • 卢森堡中央银行卢森堡中央银行(法语:Banque Centrale du Luxembourg, BCL)位于卢森堡大公国,成立于1998年,和欧洲中央银行同时成立。依据在4月22日和12月23日法律,卢森堡中央银行正式成为欧洲中
  • 科珀斯克里斯蒂学院剑桥大学基督圣体学院(英语:Corpus Christi College, Cambridge)是剑桥大学的一个学院。基督圣体学院是剑桥大学唯一一所由剑桥市民建立的学院,为纪念学基督圣体和圣母玛利亚始
  • 洛杉矶公羊American Football League(英语:American Football League (1936)) (1936) 国家橄榄球联盟 (1937–至今)联盟冠军 (3)联会冠军 (7)分区冠军 (20)洛杉矶公羊(英语:Los Angles Rams
  • 世界海关组织世界海关组织(World Customs Organization,缩写:WCO),是一个帮助各成员国在海关事务方面进行沟通和协作的政府间组织。该组织成立于1952年,当时称海关合作理事会(Customs Cooperati
  • 斋藤千春斋藤千春(日语:斎藤 ちはる/さいとう ちはる  */?,1997年2月17日-)是日本女性新闻播音员,为女子偶像团体乃木坂46前成员,埼玉县出身。父亲斋藤伸明是现役业余美式足球选手,大伯父是
  • 恶性转化恶性转化(Malignant transformation)是指细胞或组织产生一系列遗传学上的变化,并获得恶性增殖(无限增殖)和转移能力的过程。恶性转化在体内可能发生于正常细胞或组织中, 也可能发