链接器

✍ dations ◷ 2025-09-09 09:29:49 #程序设计工具,编译器软件

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

相关

  • 侧链侧链指有机分子完整结构上的侧支,所以又可称之为“支链”。区块链中的侧链(sidechains)实质上不是特指某个区块链,而是指遵守侧链协议的所有区块链,该名词是相对与比特币主链来说
  • 施政报告施政报告可指:
  • ɘ半闭央不圆唇元音(close-mid central unrounded vowel、high-mid central unrounded vowel)是元音的一种,存在于一些语言当中,国际音标是 ⟨ɘ⟩,形如左右翻转的“e”。此符号于1
  • 零废弃零废弃(英语:Zero Waste)不产出垃圾。因应环保及永续发展的其中一种策略及概念。众多生活方式之一,其核心概念为简化生活,不过度浪费、只消费必需品、减少垃圾产生及减少回收,可透
  • 棉花屿棉花屿为台湾附属岛屿之一。位于基隆外海,是由火山作用形成的岛屿。棉花屿名称取自因海鸟多,人船近岸时海鸟纷飞、宛如棉絮飞扬而名之。岛屿的最东端为中华民国实际控制的极东
  • 太医局太医局为中国古代的医疗机构。太医局在秦朝、汉朝时归于少府所管辖,至晋朝时属于宗正所管,而八王之乱后,晋政府南迁,太医局则转为由门下省统领,到了北齐时又于太常之下。 最后在
  • 明基西门子明基通信(BenQ Mobile)是台湾明基电通的一家已宣布破产的子公司,其拥有BenQ、BenQ-SIEMENS、SIEMENS三种品牌。明基电通于2005年6月7日无预警宣布并购德国西门子公司手机部门,明
  • 相对原子质量原子量(atomic mass),也称原子质量或相对原子质量,符号ma或Ar,是指单一原子的质量,其单位为原子质量单位(符号u或Da,以往曾用amu) ,定义为一个碳12原子静止质量的
  • .kg.kg为吉尔吉斯斯坦国家及地区顶级域(ccTLD)的域名。A .ac .ad .ae .af .ag .ai .al .am .ao .aq .ar .as .at .au .aw .ax .az  B .ba .bb .bd .be .bf .bg .bh .bi .bj .
  • 向峨乡向峨乡,是中华人民共和国四川省成都市都江堰市下辖的一个乡镇级行政单位。2019年12月,撤销向峨乡、蒲阳镇,设立蒲阳街道,以原向峨乡和原蒲阳镇所属行政区域为蒲阳街道的行政区域