重定位——链接脚本的简介

以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除。

参考博客

链接脚本基本语法_Nerazzur的博客-CSDN博客_链接脚本语法(推荐)

链接脚本语法_ABCamus的博客-CSDN博客_链接脚本语法

链接地址、运行地址、加载地址、存储地址_嵌入式Sky的博客-CSDN博客_链接地址

链接脚本(link script)语法 - aspirs - 博客园

Linker scripts (推荐)

一、链接脚本的含义及作用

链接脚本是一个规则文件,用来指导链接器工作。链接器会根据链接脚本中的规则,去处理.o文件中的程序段(一般情况下每个.o文件会包含若干个程序段,而不是只有某个程序段),将其链接成一个可执行程序。

二、链接脚本的组成及语法

1、基本语法

简单的链接脚本内容如下,可见其关键内容有两部分,即链接地址、程序段。

SECTIONS  //SECTIONS{},这个表示整个链接脚本。
{    //这句代码表示链接地址是0xd0024000. = 0xd0024000; //点号,在链接脚本中代表当前位置。//等号,在链接脚本中表示赋值操作。.text : {// 段名为.text,即文本段start.o* (.text)}.data : {* (.data)}bss_start = .; .bss : {* (.bss)}bss_end  = .;	
}

2、链接地址

在程序编译的时候,每个目标文件都是由源代码编译得到,最终多个目标文件链接生成一个可执行文件,而链接地址就是告知链接器,各个目标文件在可执行程序中的位置。比如,一个可执行程序a.out由a.o、b.o、c.o组成,那么最终的a.out中谁在前谁在中间谁在结尾,都可以通过制定链接地址来决定。链接地址是静态的,在进行程序编译的时候指定的。

P.S.上面这段话感觉是链接脚本的含义,而不是链接地址的含义。我理解的链接地址,指的是可执行文件将来要下载到哪个地址;链接地址在链接脚本中只定义一次,即链接脚本开头的第一句代码“ . = 0xd0024000; ”。但实际学习下来,好像上面这段话是对的。


3、程序段

程序段,是指程序的某部分。整个程序可以分为许多程序段,我们给这些程序段起名字,方便在链接的时候用段名来指代这些段,从而让这些程序段位于合适的位置。

程序段分为以下几种:代码段(.text)、数据段(.data)、bss段(ZI段)、自定义段。其中代码段(.text)、数据段(.data)、bss段(ZI段)这些段名是编译器链接器内部定好的。程序员也可以自己给某些段起名字,这些段就称为自定义段。

(1)代码段:也叫文本段,用符号“.text”表示。它其实就是函数编译后生成的东西。

(2)数据段:用符号“.data”表示,它其实就是C语言中有显式初始化为非0的全局变量。

(3)bss 段:也叫ZI段,即零初始化段,用符号“.bss”表示。它对应C语言中初始化为0(或者没有显式初始化)的全局变量。

(4)自定义段:段名由程序员自己定义,段的属性和特征也由程序员自己定义。

4、拓展说明

(1)C语言中全局变量如果未显式初始化则其值为何是0?

本质就是C语言把这类全局变量放在了bss段,从而保证其值为0。

(2)如何保证显式初始化为非0的全局变量的值在main之前就被赋值了?

编译器与链接器这类变量放在.data段中,而.data段会在main执行之前被处理(初始化)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/461886.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OpenCV学习(27) 直方图(4)

我们可以利用OpenCV的直方图,backproject直方图和meanshift算法来跟踪物体。下面通过简单的例子来说明如何实现跟踪算法,我们有两幅狒狒的图片,如下图所示:我们首先在左图中框选狒狒的脸,计算出框选区域的色度(HSV空间…

IIS启用页面Gzip压缩实现说明

HTTP压缩是在Web服务器和浏览器间传输压缩文本内容的方法。 HTTP压缩采用通用的压缩算法如gzip等压缩HTML、JavaScript或CSS文件。 压缩的最大好处就是降低了网络传输的数据量,从而提高客户端浏览器的访问速度。 当然,同时也会增加一点点服务器的负担。G…

MySQL源码编译与初始化

MySQL源码编译与初始化 链接:https://pan.baidu.com/s/1ANGg3Kd_28BzQrA5ya17fQ 提取码:ekpy 复制这段内容后打开百度网盘手机App,操作更方便哦 1.MySQL简介 1.1数据库有很多种类: 关系型数据库--->MySQL Oracle非关系型数据库…

uboot中的虚拟地址映射

1、DRAM有效范围 (1)DMC0上允许的地址范围是20000000-3FFFFFFF(一共是512MB),而X210开发板实际只接了256MB物理内存,SoC允许我们给这256MB挑选地址范围。在裸机中DMC0的地址范围是0x20000000-0x2FFFFFFF&am…

.net remoting 技术

Remoting编辑目 录 1简介 2主要元素 3两种通道 4激活方式 5对象定义 6服务器 7客户 8基础补充 9小结 1简介 什么是Remoting,简而言之,我们可以将其看作是一种分布式处理方式 。从微软的产品角度来看,可以说Remoting就是DCOM的一种升级&#x…

浪客剑心:位图法Bitmap算法分析

看了博客园里一篇文章《一道腾讯前端试题,谁来试试身手》,正好以前了解过位图法,确实不错。位图法适用于大规模数据,但数据状态又不是很多的情况。通常是用来判断某个数据存不存在,如可标记1为存在,0为不存…

性能监控工具javamelody与spring的集成

详细信息可以访问javamelody的官方网站 我在集成的过程中,一直出现commonHibernateDao的加载问题, 另外,根据官方文档,如果你的应用与monitoring-spring.xml或者AOP之类的有冲突,那么使用monitoring-spring-datasource…

tar命令:Linux下的解压与压缩命令

以下内容源于网络资源的学习与整理,如有侵权请告知删除。 一、必选且只选其一的参数 -c,表示创建压缩文件,c代表create -x,表示解压缩文件 -t,表示查看压缩包里面的文件 -r,向压缩归档文件末尾追加文件 -u…

vba基本操作 -- 常用功能

显示工作簿所在目录Sub DisplayPath()Debug.Print ThisWorkbook.Path End Sub 转载于:https://www.cnblogs.com/nikeylee/archive/2012/07/12/2588796.html

如何为root帐号开启SSH登录

以下内容源于网络资源的学习与整理,如有侵权请告知删除。 1、在虚拟机ubuntu中以root用户登录。 2、修改/etc/ssh/sshd_config文件内容,将“PermitRootLogin without-password”注释掉,添加“PermitRootLogin yes”。 # Authentication: L…

GoogLeNet结构

Inception V1 GoogLeNet结构(Inception V1) 输入为224x224的RGB图像,‘#3x3 reduce’和‘#5x5 reduce’表示3x3和5x5卷积之前1x1的卷积核的个数。 转载于:https://www.cnblogs.com/Peyton-Li/p/11201038.html

NSString

//去掉最后路径 - (NSString *)stringByDeletingPathExtension;转载于:https://www.cnblogs.com/ThankForYou/archive/2012/07/14/2591334.html

委托回调的异步技术

static void Main(string[] args){//DateTime dt DateTime.Now;//RemoteObject.MyObject app new RemoteObject.MyObject();//Console.WriteLine(app.ALongTimeMethod(1, 2, 1000));//Method();//Console.WriteLine("用了" ((TimeSpan)(DateTime.Now - dt)).Total…

uboot的移植——移植三星官方的uboot到x210开发板

以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除。 一、移植总结 二、移植过程 1、获取三星官方版本的uboot (1)由于X210开发板使用S5PV210这款CPU,因此我们应该寻找一块使用相同CPU的开发板,然后以这块…

Hadoop 文件命令

为什么80%的码农都做不了架构师?>>> * 文件操作 * 查看目录文件 * $ hadoop dfs -ls /user/cl * * 创建文件目录 * $ hadoop dfs -mkdir /user/cl/temp * * 删除文件 * $ hadoop dfs -rm /user/cl/temp/a.txt * * 删除目录与目录下所有文件 …

chmod命令:修改文件(夹)权限

1、快速浏览 (1)修改xxx文件夹及其子文件的权限:chmod -R 777 xxx (2)给xxx文件的拥有者添加可执行权限: chmod ux xxx 2、一些说明 chmod用于改变文件或目录的访问权限,该命令有两种用法。一种…

Swans and ducks, Piešťany, Slovakia

What Makes This a Photo of the Day? I love the slightly off-kilter composition here, with the cluster of birds near the bottom of the frame. This gives a sense of movement and allows the eye to take in the peripheral elements—the ripples of the water and…

简单工厂和策略模式结合

商场促销活动:打折、满额返现等等 主函数对工厂模式和策略模式结合的调用: class Program { static void Main(string[] args) { //简单工厂模式 CashSuper csuper CashFactory.CreateCashAccept("打8折&q…

python day15

今日内容 昨日内容补充: 对于两个文件中的互相导入md模块问题分析: x 1from md import xprint(x)# md中的xfrom md import xx 1000print(x)# 当前文件中的x __all__ 列表写什么,执行导入语句那个文件就能拿到什么; __all__不写的情况,默认是将所在文件所有的名字都暴露给导入…