博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
读《程序员的自我修养》有感---编译&静态链接
阅读量:6688 次
发布时间:2019-06-25

本文共 478 字,大约阅读时间需要 1 分钟。

hot3.png

    编译型的语言程序,需要经过大体的编译、链接、装载三个步骤,也就是源代码->机器指令(文件),单独的指令文件(带有符号引用)->整体的指令文件(符号已解析),指令文件->实例进程三个过程,这是概略的说。下图可以给出一个稍微具体的过程概览

    在汇编之后,得到一个目标文件(obj,.o格式),大体如图所示由于每个编译得到的目标文件都或多或少地有引用到外部文件符号(变量/函数等),所以在目标文件中此时符号的地址还是待定状态(由0x00000000或者其他立即数代替),而静态链接就是将各个目标文件整合并确定各个待定符号的具体地址,从而成为可执行文件。具体分为两个关键步骤:

  1. 空间与地址分配:扫描所有的输入目标文件,获得他们各个段的长度、属性和位置,之后合并相同段,计算出新段的长度和位置,并且将所有符号表合并为一个全局符号表
  2. 符号解析与重定位:使用第一步收集到的信息,读取输入目标文件中的重定位信息,进行符号解析与重定位、调整代码中的地址等(地址分为绝对和相对)

转载于:https://my.oschina.net/u/3281747/blog/1532376

你可能感兴趣的文章
Drawable解析4——StateListDrawable和AnimationDrawable
查看>>
如何使用Hanlp加载大字典
查看>>
特斯拉Model 3进化不止 传统车企到底应该学什么? ...
查看>>
1月18日云栖精选夜读 | Euler 今日问世!国内首个工业级的图深度学习开源框架,阿里妈妈造 ...
查看>>
4月云栖社区最新技术活动预告
查看>>
我的JAVA面试经验(3年左右工作经验)
查看>>
(十五)Java springcloud B2B2C o2o多用户商城 springcloud架构-commonservice-sso...
查看>>
新能源汽车屡着火,AIoT提供了保命招
查看>>
向蚂蚁学习!六足机器人可利用偏振太阳光实现精确导航 ...
查看>>
大数据开发学习路线,如何快速成为大数据工程师?
查看>>
脚本填报表的条件查询
查看>>
好程序员web前端分享js技巧和js中一些常见的陷阱
查看>>
从一个开发的角度看负载均衡和LVS
查看>>
Spring Boot(12)——使用MongoDB
查看>>
c++基础(上) 听课流水账
查看>>
Observable
查看>>
k8s使用deployment升级
查看>>
PostgreSQL 动态更新 C 语言函数
查看>>
结合场景谈一谈微服务配置
查看>>
Java基本语法
查看>>