文档章节

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

Explorer0
 Explorer0
发布于 2017/09/09 18:55
字数 383
阅读 39
收藏 0
点赞 0
评论 0

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

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

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

© 著作权归作者所有

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

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

sssssuuuuu666 ⋅ 2017/12/14 ⋅ 0

从零开始UNIX环境高级编程(7):进程环境

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

伤口不该结疤 ⋅ 2017/04/24 ⋅ 0

LLVM每日谈之十一 编译器相关学习资料推荐

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

snsn1984 ⋅ 2013/03/08 ⋅ 0

C程序编译过程浅析

原文出处:笑遍世界,2012-01-08 前几天看了《程序员的自我修养——链接、装载与库》中的第二章“编译和链接”,主要根据其中的内容简单总结一下C程序编译的过程吧。 我现在一般都是用gcc,所...

笑遍世界,2012-01-08 ⋅ 2016/12/28 ⋅ 0

Linux 中printf函数的链接问题

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

anglo1990 ⋅ 2013/05/11 ⋅ 2

《程序员的自我修养》系列技术文章整理收藏

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

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

游戏开发必看书籍

自顶向下: 设计模式:可复用面向对象软件基础、游戏开发设计模式 软件工程、UML 数据结构与算法、算法导论 计算机图形学 游戏人工智能编程案例精粹 C++ primer(stanley B lippman)、effecti...

yintao ⋅ 2014/06/01 ⋅ 0

论程序员的自我修养

想要成为一名资深的程序员需要具备各方面的能力,这就是程序员的自我修养,作为刚入行的程序员小辈最初的疑问是如何成为一个程序员?随着阅历的增长,有的程序员就会发问:如何成为一名资深的...

Navicat数据库管理工具 ⋅ 2016/05/04 ⋅ 0

静态库和动态库

静态库和动态库 ASPIRE2017-01-1127 阅读 gccLinux =Start= 缘由: 补充系统知识 正文: 参考解答: 我们通常把一些公用函数制作成函数库,供其它程序使用(代码的复用)。函数库可分为静态库...

ASPIRE ⋅ 2017/01/11 ⋅ 0

趣探 Mach-O:FishHook 解析

这是Mach-O系列的第三篇 阅读 源码之前,你可能需要对以下知识有个简单的了解 Mach-O文件格式:趣探 Mach-O:文件格式分析 动态链接相关知识:Mach-O 的动态链接过程 、 趣探 Mach-O:加载过...

Joy_xx ⋅ 2017/11/15 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

门面模式

1. 门面模式定义理解 是比较常用的封装模式,也称为外观模式; 标准定义:Provide a unified interface to a set of interfaces in a subsystem.Facade defines a higher-level interface t...

liuyan_lc ⋅ 20分钟前 ⋅ 0

SpringCloud 微服务 (九) Spring Cloud Bus

壹 本篇结合上篇学习使用SpringCloud Bus结合MQ来实现自动刷新 上篇有远端git码云,本地git,config统一配置中心服务,order服务,product服务 过程: 启动服务时,config服务将远端git的配置拉取到...

___大侠 ⋅ 21分钟前 ⋅ 0

别被别人抢走了你的时间!

前两天,有读者在评论区给我留言,问我类似于 618、双十一这样的电商狂欢,我会参与么? 我给他的回复很直接,我很少参与这类活动,尤其是一些整点抢券的行为,更加不会参与,因为我的时间很...

古乙丁三雨 ⋅ 25分钟前 ⋅ 0

nginx开启gzip压缩JS文件失败?

检查下GZIP设置的压缩的文件类型有没有application/x-javascript,在服务器在传送JavaScript文件时使用的MIME类型通常是这个.

hang1989 ⋅ 25分钟前 ⋅ 0

DockOne微信分享(一二九):聊聊Service Mesh:linkerd

【编者的话】随着企业逐渐将传统的单体应用向微服务或云原生应用的转变,虽然微服务或者云原生应用能给企业带来更多的好处,但也会带来一些具有挑战的问题,如怎么管理从单体应用转向微服务所...

xiaomin0322 ⋅ 30分钟前 ⋅ 0

linear regression

今天分享一个很经典的ML算法---LIner regression(线性回归) **线性回归(Linear regression)**是利用称为线性回归方程的最小二乘函数对一个或多个自变量和因变量之间关系进行建模的一种回归...

gfjjfuy112 ⋅ 32分钟前 ⋅ 0

百度地图使用经验-第1集:成功展现第1个地图

第1步:引入js(携带密钥) 第2步: 创建一个div 第3步: 写js 类: js自己的面向对象的特点; ES6 PHP,JAVA,C++ 插曲:事件 22小时前 事件和函数的区别: 函数是事先写好函数体,手工调用。...

宁哥实战课堂 ⋅ 34分钟前 ⋅ 0

sudo java : command not found

运行sudo java报错 $ sudo java$ sudo: java:找不到命令 解决方案: sudo命令后加-E,保留用户运行环境的环境变量。 sudo -E env PATH=$PATH java...

勇敢的飞石 ⋅ 37分钟前 ⋅ 0

ecs修改主机名称

https://help.aliyun.com/knowledge_detail/41305.html

张宏亮1982 ⋅ 39分钟前 ⋅ 0

扩展JS validate

if ($.validator) { //验证手机号码 $.validator.addMethod("phone", function (value, element, params) { return /^(1)[0-9]{10}$/.test(value); }, "请输入有效的......

熊猫你好 ⋅ 40分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部