链接器

✍ dations ◷ 2025-11-16 09:39:48 #程序设计工具,编译器软件

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

相关

  • 向地性向地性(英语:geotropism/gravitropism)是植物的某些部分对地心吸力所作出的生长反应。根会向着地心吸力的方向生长,因此根呈正向地性;茎则向上生长,因此茎呈负向地性。植物的根呈
  • 尼泊尔共产党已消亡已放弃共产主义意识形态已消亡已放弃共产主义意识形态已消亡已放弃共产主义意识形态已消亡已消亡已放弃共产主义意识形态尼泊尔共产党(联合马列)(尼泊尔语:नेपाल क
  • 氧 (消歧义)氧可以指:
  • 大浦洞-1导弹大浦洞1号导弹(대포동 1호,Taepodong-1),朝鲜称白头山1号导弹(백두산 1호)是朝鲜研制的中近程弹道导弹,射程为2500公里。据韩国《中央日报》2月15日援引该国官方消息称,朝鲜已经成功
  • 苏丹民主共和国苏丹民主共和国(阿拉伯语:جمهورية السودان الديمُقراطية‎,转写:Jumhūrīyat as-Sūdān ad-Dīmuqrāṭīyah)是一个存在于1969年-1985年的国家。196
  • 烧录卡烧录卡是一种用于任天堂DS或Game Boy Advance上的一种存储介质,通过它,可以使NDS或GBA机器对存储芯片内的各种文件进行读取。目前种类上分两种不同规格的烧录卡:一种是插SLOT-2
  • 热铁皮屋顶上的猫《热铁皮屋顶上的猫》(英语:)是一部1958年的美国电影,理查·布鲁克斯执导,保罗·纽曼和伊丽莎白·泰勒分饰男女主角,剧情改编自田纳西·威廉斯1955年的一套同名百老汇舞台剧,描写美
  • 大本营大本营可以指:
  • 埃温德·雍松埃温德·雍松(瑞典语:Eyvind Johnson,1900年7月29日-1976年8月25日),瑞典作家,1974年与哈里·埃德蒙·马丁松共同获得诺贝尔文学奖。 1901年:普吕多姆 |1902年:蒙森 |1903年:比昂松 |1
  • 驮隆口岸驮隆口岸(越南语:Cửa khẩu Tà Lùng),是位于越南高平省复和县的一个边境口岸。该口岸地处越南国道3号的终点,与中国广西省龙州县水口口岸隔河相望。广西·龙州中越水口—驮隆