文档章节

读《程序员的自我修养》有感---编译&静态链接

Explorer0
 Explorer0
发布于 2017/09/09 18:55
字数 383
阅读 44
收藏 0

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

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

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

© 著作权归作者所有

共有 人打赏支持
Explorer0
粉丝 4
博文 25
码字总数 17389
作品 0
厦门
其他
LINUX-动态链接与静态链接对比(动态库和静态库)

一、库的基础概念: 在windows平台和linux平台下都大量存在着库。本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行。由于windows和linux的本质不同,因此二者库的二进...

sssssuuuuu666
2017/12/14
0
0
从零开始UNIX环境高级编程(7):进程环境

0. 引言 在学习进程控制前,先了解进程运行的环境,如:main函数是如何被调用的;命令行参数是如何传递给新程序的;程序在内存空间中是什么样的结构;进程的终止方式等。 进程环境 1. main函...

伤口不该结疤
2017/04/24
0
0
LLVM每日谈之十一 编译器相关学习资料推荐

作者:snsn1984 近来碰到一些想学习LLVM但是已经把编译原理的知识还给老师的朋友,让帮忙推荐一些学习资料,我就把手头有的一些资料,大都是自己读过的一些资料整理一下,列出来,希望对大家...

snsn1984
2013/03/08
0
0
Linux 中printf函数的链接问题

在程序员的自我修养这本书上看的,在linux中c语言的静态库libc位于/usr/lib/ibc.a 中,我安装的系统是red hat 的,怎么没有找到libc.a这个静态文件,用 find的命令找了一下,是在arm-linux下...

anglo1990
2013/05/11
509
2
《程序员的自我修养》系列技术文章整理收藏

《程序员的自我修养》系列技术文章整理收藏 程序员的自我修养,关于程序员的自我修养,程序员职场修养,程序员的技术修养,一个程序员如何走向大师之路 1思维改变生活:不需要经历也能明白 ...

开元中国2015
2015/06/27
26
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周日乱弹 —— 小心着凉 @红薯

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @莱布妮子:5.33起,其声呜呜然,如怨如慕,如泣如诉。余音袅袅,不绝如缕。分享Arch Enemy的单曲《Bridge Of Destiny (2009)》 《Bridge Of...

小小编辑
今天
170
4
what f,,

anlve
今天
2
0
初级开发-编程题

` public static void main(String[] args) { System.out.println(changeStrToUpperCase("user_name_abc")); System.out.println(changeStrToLowerCase(changeStrToUpperCase("user_name_abc......

小池仔
今天
14
0
现场看路演了!

HiBlock
昨天
21
0
Rabbit MQ基本概念介绍

RabbitMQ介绍 • RabbitMQ是一个消息中间件,是一个很好用的消息队列框架。 • ConnectionFactory、Connection、Channel都是RabbitMQ对外提供的API中最基本的对象。Connection是RabbitMQ的s...

寰宇01
昨天
17
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部