链接器

✍ dations ◷ 2025-02-23 14:33:40 #程序设计工具,编译器软件

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

相关

  • 艾滋病毒人类免疫缺陷病毒(英语:human immunodeficiency virus,簡稱HIV,又称艾滋病毒)是一种感染人类免疫系统细胞的慢病毒,属逆转录病毒的一种。普遍认为,人类免疫缺陷病毒的感染导致艾滋
  • 电脑断层血管摄影术电脑断层血管摄影术(英文:Computed tomography angiography,CT-Angiograph,CTA)是一种利用电脑断层扫描(CT)技术进行的血管造影检查,其可探及全身的所有动脉与静脉血管,包括心、脑、
  • 磷灰石磷灰石是一类含钙的磷酸盐矿物总称,其化学成分为Ca5(PO4)3(F,Cl,OH),其中含CaO为55.38%,含P2O5为42.06%,含F为1.25%,含Cl为2.33%,含H2O为0.56%。最常见的磷灰石矿物种是氟磷灰石Ca
  • 化脓灸化脓灸,也称作为疤痕灸,属于中医针灸直接灸的一种。是以5mm左右的艾炷放置在体表某些穴位直接烧灼。一般每穴3~9壮,然后贴以膏药。该治疗方法有提高人体免疫力的功能,故也被称为
  • 头罗曼头罗曼(?-517年)也作多罗摩那,拖拉曼那,是公元5世纪末至6世纪初嚈哒在印度的统治者。约465年,嚈哒占据犍陀罗,任该地“特勤”(即总督)。从470年开始,他以犍陀罗为中心,进攻笈多帝国,逐渐
  • 中西区中西区可以指:
  • 六角四片四角孔扭歪无限面体在几何学中,六角四片四角孔扭歪无限面体 (英语:muoctahedron、日语:六角四片四角孔ねじれ正多面体)是一种正扭歪无限面体,是一个由六边形组成且发散的多面体,其多面体所形成的结构
  • 滑铁卢 (安大略省)滑铁卢(英语:Waterloo)是加拿大安大略省滑铁卢区一座城市。滑铁卢与邻近的基奇纳市合称“基奇纳-滑铁卢”(Kitchener-Waterloo,简称“K-W”),而两者亦与剑桥市组成三联市城市群(Tri-C
  • 汉斯·利滕汉斯·阿希姆·利滕(Hans Achim Litten,1903年6月19日-1938年2月5日)是一位德国律师,曾在1929年到1932年之间代理过对手是国家社会主义德意志劳工党(纳粹党)的重要政治案件,为捍卫魏
  • Berry GoodBerry Good (韩语:베리굿)是JTG娱乐于2014年5月成立的五人女子音乐组合,初始成员有邰贺、高云、秀彬、Iera、娜妍。经成员变动后,现任成员有祚弦、徐律、多艺、世馨、高云。团名"