链接器

✍ dations ◷ 2025-07-27 11:19:37 #程序设计工具,编译器软件

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

相关

  • 外寄生虫感染外寄生物感染是指主要由外寄生物引起的寄生虫病。外寄生物即暂时或永久寄生于宿主体表的寄生物。例如:治疗外寄生物感染常使用杀外寄生虫药(英语:ectoparasiticide),以杀死外寄生
  • 玉嫔玉嫔(1843年8月14日-1863年1月5日),星恳达尔汉系叶赫那拉氏,出自褚孔格第三子尼雅尼雅喀一脉。满洲正白旗人。员外郎桂祥之女,全志的孙女,兵部尚书那清安之曾孙女。清文宗璹嫔为她
  • 织女织女是天帝与王母娘娘所生的七仙女的幺女,排行第七,工作是编织神仙的衣服以及天上的云彩,是纺织业者、情侣、妇女、儿童的守护神,著名的民间故事牛郎织女的女主角,古代中国天文中
  • 甚大望远镜甚大望远镜(Very Large Telescope,缩写为VLT,或译超大型望远镜、特大望远镜)为欧洲南方天文台在智利建造的大型光学望远镜,由4台相同的8.2米口径望远镜组成,组合的等效口径可达16
  • 淡水汽候观测所坐标:25°09′53″N 121°26′58″E / 25.1646°N 121.44931°E / 25.1646; 121.44931淡水汽候观测所是台湾新北市市定古迹,位于新北市淡水区中正东路42巷6号,也就是在鼻仔头水
  • 迈克尔·科林斯迈克尔·柯林斯(Michael Collins,1930年10月31日-)曾是一位美国国家航空航天局的宇航员,执行过双子座10号以及阿波罗11号任务。
  • 弹道导弹潜艇弹道导弹潜艇(英语:Ballistic Missile Submarine)是一种以发射弹道导弹为主要功能、专用于水底隐身潜航以作为核威慑(nuclear deterrent)武力平台的潜艇类别。世界上最早成军的弹
  • 段雪段雪(1957年1月-),北京人,中国应用化学家,现任北京化工大学应用化学系研究员,北京化工大学化工资源有效利用国家重点实验室主任。1982年毕业于吉林大学化学系,1988年获北京化工学院
  • 奈克奈克,亦作毫微克,质量单位,符号ng(法语:nanogramme)。奈克是一个极微少的质量单位。1奈克等于十亿分之一克(10-9克)
  • 曼达鳄属曼达鳄(学名:Mandasuchus)是劳氏鳄目迅猛鳄科的一属,化石发现于坦桑尼亚的曼达组(Manda Formation),地质年代为三叠纪中期的拉丁尼阶到安尼西阶。。目前已经发现数个包存状态良好的