fbpx
维基百科

链接器

链接器(英語:Linker),又譯為链結器连结器,是一个程序,将一个或多个由编译器汇编器生成的目标文件外加,链接为一个可执行文件

An illustration of the linking process. Object files and static libraries are assembled into a new library or executable.

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寄存器值。

链接器, 此条目的主題是電腦上的连结器, 关于鐵路車輛上使用的连结器, 請見, 鐵路連接器, 此條目没有列出任何参考或来源, 2019年3月20日, 維基百科所有的內容都應該可供查證, 请协助補充可靠来源以改善这篇条目, 无法查证的內容可能會因為異議提出而被移除, 英語, linker, 又譯為链結器, 连结器, 是一个程序, 将一个或多个由编译器或汇编器生成的目标文件外加库, 链接为一个可执行文件, illustration, linking, process, object, files, static, li. 此条目的主題是電腦上的连结器 关于鐵路車輛上使用的连结器 請見 鐵路連接器 此條目没有列出任何参考或来源 2019年3月20日 維基百科所有的內容都應該可供查證 请协助補充可靠来源以改善这篇条目 无法查证的內容可能會因為異議提出而被移除 链接器 英語 Linker 又譯為链結器 连结器 是一个程序 将一个或多个由编译器或汇编器生成的目标文件外加库 链接为一个可执行文件 An illustration of the linking process Object files and static libraries are assembled into a new library or executable 在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寄存器值 取自 https zh wikipedia org w index php title 链接器 amp oldid 66209024, 维基百科,wiki,书籍,书籍,图书馆,

文章

,阅读,下载,免费,免费下载,mp3,视频,mp4,3gp, jpg,jpeg,gif,png,图片,音乐,歌曲,电影,书籍,游戏,游戏。