美文网首页
CSAPP链接1

CSAPP链接1

作者: 王加冰 | 来源:发表于2018-12-09 20:25 被阅读0次

一、

链接是将各种代码和数据分片收集并合并成为一个单一文件的过程。在软件开发中扮演着重要的角色,因为它使得分离编译成为可能,可以把一个大型的应用程序分解为更小的、更好管理的模块,可以独立的修改和编译。

学习链接知识的重要作用:理解链接器将帮助你构造大型程序。理解链接器将帮助你避免一些危险的编程错误。理解链接将帮助你理解其他重要的系统概念。理解链接将能使你利用共享库。

二、

编译器和汇编器生成的可重定位的目标文件(包括共享文件)。链接器生成可执行目标文件。从技术上来说,一个目标模块就是一个字节序列,而一个目标文件就是一个文件形式存放在磁盘的目标模块。

目标文件分为三种:

可重定位的目标文件:包含二进制代码和数据,其形式可以在编译时与其他可重定位目标文件合并起来,创建一个可执行文件。

可执行目标文件:包含二进制代码和数据,其形式可以被直接复制到内存中执行。

共享目标文件:一种特殊类型的可重定位目标文件,可以在加载或者运行时被动态加载进内存并链接。

三、

可重定位目标文件文件格式

符号和符号表:每个可重定位目标模块x都有一个符号表,它包含x定义和引用的符号的信息,在链接器的上下文中有三种不同的符号:1、由模块m定义并能被其他模块引用的全局符号。全局链接器符号对应于非静态的函数和全局变量。2、由其他模块定义并被模块m引用的全局符号。这些符号被称为外部符号,对应于在其他模块中定义的非静态函数和全局变量。3、只被模块m定义和引用的局部符号。它们对应于带static属性的函数和全局变量。这些符号在模块m中任何位置都可见,但不能被其他模块引用。

符号解析:链接器解析符号引用的方法是将每个引用与它输入的可重定位目标文件的符号表中的一个确定的符号定义关联起来。

重定位:一旦链接器完成解析,就把代码中的每个符号引用和正好一个符号定义关联起来,此时,链接器就知道它的输入目标模块的代码节和数据节的确切大小。然后开始进行重定位的步鄹。

重定位节和符号定义:在这一步中,链接器将所有相同类型的节合并为同一类型的新的聚合节。

重定位节中的符号引用:在这一步中,链接器修改代码节和数据节中对每个符号的引用,使得它们指向正确的运行时地址。要执行这一步,链接器依赖于可重定位目标模块中称为重定位条目的数据结构。

相关文章

  • CSAPP链接1

    一、 链接是将各种代码和数据分片收集并合并成为一个单一文件的过程。在软件开发中扮演着重要的角色,因为它使得分离编译...

  • linux 链接器 库打桩

    @(linux 编程) 翻看 CSAPP 看到库函数打桩,记录下。 linux 链接器支持库打桩(library ...

  • CSAPP -- Chapter 1

    C语言 hello world 程序 hello程序的生命周期是从一个源程序(源文件)开始的,即程序员通过编辑器创...

  • bomb lab 解题报告

    对应课本csapp 的实验 https://hakula.xyz/csapp/bomblab.html[https...

  • 2018-10-10 TEST CSAPP

    2018-10-10 TEST CSAPP 2018-10-10 TEST CSAPP 2018-10-10 TE...

  • CSAPP translation page 1

    1.1信息就是位(bits)+上下文(context) 我们的hello 程序生命开始就是一个源程序(或者称为一个...

  • CSAPP——bomblab实验1

    最近学习CSAPP,做到对应实验bomblab了,记录一下拆弹过程。 https://github.com/Eug...

  • csapp

    CSAPP 2.27 2.30 2.39 2.40 2.41 2.42 2.43 2.44 2.47 2.58 2...

  • CSAPP

    进程 进程是操作系统对一个正在运行的程序的一种抽象。并发运行,则是说一个进程的指令与另一个进程的指令是交错执行的。...

  • CSAPP

    每天2页。2021年4月底,我将啃下这本700页大部头。2020年5月底,我将学会浮点数的2进制表示。 2020/...

网友评论

      本文标题:CSAPP链接1

      本文链接:https://www.haomeiwen.com/subject/trracqtx.html