美文网首页
链接器的作用

链接器的作用

作者: 沙漠中的猴 | 来源:发表于2018-08-15 14:17 被阅读0次

简介

一个大的程序往往会分为多个源程序文件来编写,因而需要对多个源程序分别进行编译或汇编,来生成多个不同的目标文件(.o文件),这些目标文件包含指令、数据、和其他说明信息。

为了生成一个可执行文件,需要按照一定的格式将多个目标文件融合在一起。而这就是链接器最基本的作用。

目标文件与可执行文件对比

目标文件

root@000d3fada0b3:~/asm# objdump -d hello.o

hello.o:     file format elf64-x86-64


Disassembly of section .text:

0000000000000000 <_start>:
   0:   b8 01 00 00 00          mov    $0x1,%eax
   5:   bf 01 00 00 00          mov    $0x1,%edi
   a:   48 be 00 00 00 00 00    movabs $0x0,%rsi
  11:   00 00 00
  14:   ba 0e 00 00 00          mov    $0xe,%edx
  19:   0f 05                   syscall
  1b:   b8 3c 00 00 00          mov    $0x3c,%eax
  20:   48 31 ff                xor    %rdi,%rdi
  23:   0f 05                   syscall

反汇编时,我们可以看到<_start>标签是没有分配地址的。

可执行文件

root@000d3fada0b3:~/asm# objdump -d hello

hello:     file format elf64-x86-64


Disassembly of section .text:

00000000004000b0 <_start>:
  4000b0:   b8 01 00 00 00          mov    $0x1,%eax
  4000b5:   bf 01 00 00 00          mov    $0x1,%edi
  4000ba:   48 be d8 00 60 00 00    movabs $0x6000d8,%rsi
  4000c1:   00 00 00
  4000c4:   ba 0e 00 00 00          mov    $0xe,%edx
  4000c9:   0f 05                   syscall
  4000cb:   b8 3c 00 00 00          mov    $0x3c,%eax
  4000d0:   48 31 ff                xor    %rdi,%rdi
  4000d3:   0f 05                   syscall

反汇编时,我们可以看到<_start>标签是分配了地址的。

链接器的作用

解析符号

解析文件中的变量、函数名称、语句等内容生成符号表。
符号表是一个结构数组,每个表项包含符号名、长度和位置信息等。

重新分配段(Section)空间


(ps: 不仅丑,还写错了。应该是.text)

每个目标文件(.o 文件)都有自己独立的.text段(Section)和.data段(Section)等空间。链接器将多个目标文件链接之后,生成一个新的可执行文件,需要对.text段以及.data段进行空间划分。

使用链接器的好处

模块化

可以将不同的源代码文件,由不同的人编写。之后再链接到一起。

提高效率

每个模块分开编译,只需要编译重新修改的源程序文件,之后再重新链接即可。

相关文章

  • 链接器的作用

    简介 一个大的程序往往会分为多个源程序文件来编写,因而需要对多个源程序分别进行编译或汇编,来生成多个不同的目标文件...

  • 7_揭开链接器的面纱(上)

    关键词:链接器的意义、链接器的工作内容、程序的启动过程、自定义程序入口函数 1. 链接器的意义 链接器的主要作用是...

  • 编译器和链接器

    编译器的作用: 编译器是把源代码转换成中间代码 链接器的作用: 链接器是把用户编写的代码,系统的标准启动代码和库代...

  • DOCTYPE

    原文链接:DOCTYPE的作用:文档类型与浏览器模式 DOCTYPE DTD(document type defi...

  • 第12章:存储类别、链接和内存管理

    #1. 存储类别1.1 作用域1.2 链接1.3 存储期1.4 自动变量1.5 寄存器变量1.6 块作用域的静态变...

  • HTML标签(一)

    说说超链接a标签target属性的取值和作用? target这个属性指定所链接的页面在浏览器窗口中的打开方式。 它...

  • OkHttp拦截器学习

    一、各个拦截器的作用 1.RetryAndFollowUpInterceptor负责对失败的链接在合适的情况下进行...

  • 链接器

    本文是< > 第五篇学习笔记. 首先 简单来说,链接器最主要的作用,就是将符号绑定到地址上。 编译器 iOS 开发...

  • C - 链接属性

    C 变量有 3 种链接属性: 外部链接, 内部链接或无链接. 具有块作用域, 函数作用域或函数原型作用域的变量都是...

  • 02-Python解释器

    目标 解释器的作用 下载Python解释器 安装Python解释器 一. 解释器的作用 Python解释器作用:运...

网友评论

      本文标题:链接器的作用

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