链接器

✍ dations ◷ 2025-05-21 04:31:52 #程序设计工具,编译器软件

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

相关

  • 肌肉运动知觉本体感觉,又称肌肉运动知觉,是一种对肌肉各个部分的动作或者一连串动作所产生的感觉,称呼为“自我知觉”。可是对某些人来说肌肉运动知觉跟自我知觉不同在于保持平衡的触觉。例
  • 罗莎·帕克斯罗莎·路易丝·麦考利·帕克斯(英语:Rosa Louise McCauley Parks,1913年2月4日-2005年10月24日)是一位美国黑人民权行动主义者。1955年,她在公车上拒绝让座给白人乘客,因此遭逮捕,引
  • 加拿大国际广播电台加拿大国际广播电台(Radio Canada International,RCI,简称加广)是加拿大广播公司(CBC)的一个国际广播服务。如同其他国家一样,这家电台最初也是一家短波电台,现在它也使用卫星传送讯
  • 人在囧途《人在囧途》(英语:Lost On Journey)是2010年上映的一部中国公路喜剧电影,由叶伟民执导,文隽监制。春节将近,由于三聚氰胺事件,牛奶厂没钱支付工钱,为回家过年,个性憨厚的工人牛耿(王
  • 2019冠状病毒病赤道几内亚疫情2019冠状病毒病赤道几内亚疫情,介绍在2019新型冠状病毒疫情中,在赤道几内亚发生的情况。2020年3月14日,赤道几内亚确诊首例新冠肺炎病例。患者13日从西班牙马德里乘木棉洲际航
  • 德国联邦司法和消费者保护部联邦司法和消费者保护部(德语:Bundesministerium der Justiz und für Verbraucherschutz,简称为BMJV)是德国的联邦部委之一。在德国联邦制度之下,各联邦州须负起司法行政与处罚
  • 值 (计算机科学)在计算机科学中,值(英语:Value)是一无法进一步求值的表达式。例如,表达式“1 + 2”不是一个值,因为它可以被化简为表达式“3”。表达式“3”不能够继续化简,因此它是一个值。表达式
  • 每分钟计数每分钟计数(英语:Counts per minute,符号:CPM),表示单位时间1分钟内放射性检测仪器(如盖革计数器)测到的电离事件的计数。CPM不属于国际单位制。而CPS表示1秒钟内的电离事件的计数。
  • 约翰·卡彭特 (游戏节目参赛者)约翰·卡彭特 (英语:John Carpenter,约1968年-)于1999年11月19日成为游戏节目《百万富翁》美国版本的首位赢家。他一直都保持着奖金最多的美国游戏节目赢家的头衔,直至拉希姆·奥
  • 大钉蜗牛大钉蜗牛(学名:为钉蜗牛属下的一个种,是台湾的特有种。本物种见于台湾东部及南部。