链接器

✍ dations ◷ 2025-08-18 02:08:58 #程序设计工具,编译器软件

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

相关

  • 易性癖性别不安(英语:gender dysphoria),又称性别焦虑、性别不一致,旧称性别认同障碍(英语:gender identity disorder)或易性症,是一个人因为出生时的性别指定而遭受的痛苦。在这种情况下,性
  • 阿尔韦托·冈萨雷斯阿尔韦托·冈萨雷斯(英语:Alberto Gonzales,1955年8月4日-,生于得克萨斯州圣安东尼奥),美国律师、政治家,美国共和党成员,曾任美国司法部长(2005年-2007年)。2007年8月27日宣布辞职。
  • 中期记忆中期记忆 (英语:Intermediate-term memory)是记忆的一个阶段,不同于感觉记忆,短期记忆/工作记忆,和长期记忆。 闪光灯记忆能维持几毫秒, 工作记忆能维持到三十秒,长期记忆能维持三十
  • 男演员演员是指专职演出或在表演艺术作品扮演某个角色的人,广义上分为演技、杂技、特技、歌唱、舞蹈、戏曲、乐器几大流派,狭义上在电影、电视、剧场、广播等大众媒体当中专指演技演
  • 尹 力尹力(1957年12月-),北京人,中国电影导演。主要作品有《张思德》、《云水谣》、《铁人》。曾担任第十一届、第十二届、第十三届全国政协委员。毕业于北京电影学院美术系。加入中国
  • 湖北评书湖北评书,流行于中国湖北省的长江沿岸城市。它起源于明末,但直到清同光时代才开始繁荣。书目有的来自古代演义小说,有的为原创,擅长草莽英雄的塑造。对白时多用口语,描绘景物时用
  • 水族饲养水族饲养是指在家中水族箱或池塘饲养鱼类,水母,乌龟等水族的一种爱好。其相关产业作为农业的一个分支,目前十分壮大。水族饲养通常分为淡水、半淡水以及咸水三大类。
  • 乔治·布什 (神学家)乔治·布什(1796年6月12日-1859年9月19日),男,是一个神学家和演说家。他是美国前任总统乔治·赫伯特·沃克·布什和乔治·沃克·布什的远亲。
  • 庖丁庖丁,《庄子·养生主》篇章中,一个名叫“丁”的厨师 。庖丁宰杀牛只的技法非常娴熟,宰牛时的动作,发出的声响,甚至可以作雅乐来欣赏了,他向梁文惠王介绍自己的心得。“我所追求的
  • 中法关系中法关系(法语:Relations entre la Chine et la France)是指中国与法国之间的外交关系。1960年代冷战期间,中华人民共和国作为社会主义国家同西方国家基本处于隔绝的状态,除了丹