链接器

✍ dations ◷ 2025-10-25 21:04:09 #程序设计工具,编译器软件

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

相关

  • 经济心理学经济心理学(Economics Psychological)亦称心理经济学,是研究人们对生产关系、经济政策及经济机制之心理反映规律的科学。经济心理学是由经济学、管理学和心理学相互结合的一
  • 宽带用户本列表来自于根据国际电信联盟编制的数据,按互联网用户数和普及率列出各国的可分类清单。该清单包括固定宽带和蜂窝移动网络的数据:渗透率是一个用户数量占国家人口的百分比。
  • 希尔德里克三世希尔德里克三世(法语:Childeric III,714年-754年),743年2月15日—751年11月22日在位,法兰克国王,可能是希尔佩里克二世或提乌德里克四世之子。他是墨洛温王朝的最后一个国王,被创建加
  • 燃料化学工业部中华人民共和国化学工业部是中华人民共和国国务院曾经存在的部门,1956年5月成立。1970年6月煤炭工业部、石油工业部和化学工业部合并,成立燃料化学工业部。1975年2月,撤销燃料
  • 巡逻舰巡逻舰,海军舰艇中,护卫舰以下一级的水面作战舰,吨位数可从数十吨到数百吨不等,功能视设计具体情况而定,可能用于扫雷、反潜、导弹或鱼雷突袭、近岸巡逻、巡河、情报搜集、缉私、
  • 韩国 (战国)韩国是中国战国七雄之一,姬姓。后世历史学家将韩、魏、赵、秦、楚、燕与齐合称战国七雄。韩国国土主要包括今山西南部及河南北部,初都平阳(今山西临汾),灭郑国后则迁新郑(今河南郑
  • 牡丹车辆基地牡丹车辆基地(朝鲜语:모란차량사업소/牡丹車輛事業所  */?)是首尔交通公社位于京畿道城南市中院区的一个车辆段,在首尔地铁8号线附近。这个车辆段主要用于首尔地铁8号线的8000
  • 瘤颚家蚁属瘤颚家蚁属 ()为家蚁亚科。共 849 个现生物种,4 个化石物种。大多数物种具有触发式大颚 (trap-jaw)。瘤颚家蚁于土中、石下、木下、粪便下筑巢,群体小。 行社会寄生,没有工蚁阶级
  • 荔蝽科荔蝽科(学名:Tessaratomidae),又称硕蝽科, 是半翅目的一科,是一类体形较大的昆虫。头小,很多种类颜色艳丽,还可能有金属光泽。以植物为食,有些种类被认为是农业害虫,如荔枝椿象()。有
  • 哈利努夫哈利努夫(Halinów)是波兰的一座城市。2006年,有人口3,369人。