链接器

✍ dations ◷ 2024-12-22 18:52:06 #程序设计工具,编译器软件

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

相关

  • 绿非硫细菌绿弯菌门(Chloroflexi)是一类通过光合作用产生能量的细菌,又称作绿非硫细菌,尽管还有一部分称作热微菌的细菌也属于绿非硫细菌。它们具有绿色的色素,包括作为反应中心的菌绿素a和
  • 强力霉素-5,10,11,12a-tetrahydroxy-6-methyl- 4a,5,5a,6-tetrahydro-4H-tetracene-1,3,12-trione多西环素(其国际非专利药品名称为“Doxycycline”)也称为“强力霉素”“伟霸霉素”
  • 马耳他坐标:35°57′32″N 14°24′43″E / 35.95889°N 14.41194°E / 35.95889; 14.41194面积以下资讯是以2011年估计国家领袖国内生产总值(购买力平价) 以下资讯是以2016年估计国
  • 维医学维吾尔族医学,又称维吾尔族医药学、维吾尔医药学、维吾尔医学、维吾尔医药,亦可简称维吾尔医、维医学、维医,是流传于维吾尔族中的传统医学。由于维吾尔族所居处的丝路,系欧亚大
  • 图卢兹1法国统计部门在计算土地面积时,不计算面积大于1平方公里的湖泊、池塘、冰川和河口。图卢兹(法语:Toulouse)位于法国西南部加龙河畔,大致处于大西洋和地中海之间的中点,为上加龙省
  • 三疣梭子蟹Neptunus trituberculatus Miers, 1876三疣梭子蟹(学名:Portunus trituberculatus)为梭子蟹科梭子蟹属的动物。头胸甲宽大,两侧具有长棘,略呈梭形;暗紫色,有青白色云斑;蟹足长大,第四
  • 阿敏 (清朝)阿敏(满语:ᠠᠮᡳᠨ,转写:;16世纪末-1640年),爱新觉罗氏,清朝宗室,清太祖努尔哈赤之弟舒尔哈齐次子,天聪初年四大贝勒之一。阿敏初战是在万历三十六年(1608年),与褚英征讨乌喇,攻克宜罕山城
  • 长齿长舌蝠属长齿长舌蝠属(暗色长齿长舌蝠),哺乳纲、翼手目、叶口蝠科的一属,而与长齿长舌蝠属(暗色长齿长舌蝠)同科的动物尚有安德列斯长舌蝠属(小安德列斯长舌蝠)、蕉蝠属(蕉蝠)、索热尔长舌蝠属
  • 埃尔维·西内尔沃埃尔维·奥莉基·西内尔沃(芬兰语:Elvi Aulikki Sinervo,1912年5月4日-1986年8月28日)是芬兰工人阶级的作家、诗人和翻译家。她的创作高峰期在1931至1956年间。1950年代起她也开
  • 2019年日韩贸易战 除特别注明外,本文所有时间均以东九区时间(UTC+9)为准。 韩国 日本2019年日韩贸易战(英语:2019 Japan–South Korea trade dispute,日语:2019年日韓経済戦争/にっかんけいざいせ