历史上的今天
返回首页

历史上的今天

今天是:2025年08月10日(星期日)

正在发生

2021年08月10日 | 1.4.2链接脚本,位置无关码

2021-08-10 来源:eefocus

在这里插入图片描述

secname就是section name,表示段名。


start为起始地址,即运行时的地址(runtime addr),也是重定位地址(relocate addr),程序运行时,会去该跳到该地址去执行。


AT(ldadr)为加载地址(Load Address),不写时,Load Address = runtime address,如果load address不等于runtime address,程序本身要重定位。


contents 表示内容,可以指定文件(比如start.o),也可以指定段(如代码段(.text))*。


**通过设置重定位地址和加载地址,就可以实现将指定段的数据重定位。**如下图,表示在bin文件中,data段处于0x800的位置,但是程序运行时,data段处于0x3000,0000的位置。所以,我们软件上要将0x800的data段重定位到0x3000,0000位置。

在这里插入图片描述

在这里插入图片描述

如上图所示,其中.表示当前位置。将text代码段放在0x3000,0000,*(.text)表示所有的代码段,ALIGN(4)表示4字节对齐。所以,就是将所有的代码段四字节对齐的形式放在0x3000,0000起始的位置。


然后,是所有的只读数据段,数据段,bss和common,他们都是以四字节对齐的形式排列。


其中,bin文件,elf文件中都不存在bss段,我们软件上要将这个段清零。


重定位之前的代码,与地址无关,叫做位置无关码


怎么写位置无关码的程序(使用位置无关码,不使用绝对地址,最根本的办法是看反汇编):


使用相对跳转命令B/BL;

重定位前,不可以使用绝对地址,比如,不可以访问全局/静态变量;不可以访问有初始值的数组(rodata,data)。

重定位之后,使用绝对跳转命令跳到runtime address,比如,ldr pc, =main

在这里插入图片描述
在这里插入图片描述

将代码段的runtim address设为0x3000,0000和0x3000,0000,查看反汇编码如上。


**这时候sdram还没有初始化完成,我们跳到sdram上,是不是程序执行会出问题?**其实,这里使用的是相对跳转指令,并不是真的跳到0x3000,xxxx的地方去执行,而是跳转到相对位置去执行,这里的相对位置为PC+offset,是由链接器计算出来。比如,假设程序从0x3000,0000执行,当前指令地址0x3000,005c,那么就会跳到0x3000,0478;如果从0运行,当前指令地址为0x5c,会跳到0x478;如果从0x3200,0000运行,当前指令地址为0x3000,005c,会跳到0x3200,0478;。

推荐阅读

史海拾趣

CETC公司的发展小趣事

CETC自成立以来,一直致力于电子科技领域的研发创新。在某次关键技术的攻关中,CETC的科研团队经过数月的艰苦努力,成功突破了某型雷达的核心技术,使我国在该领域达到了国际先进水平。这一成果的取得不仅提升了CETC的技术实力,也为公司在国内外市场赢得了良好的声誉,为公司的后续发展奠定了坚实基础。

Greenconn Corp公司的发展小趣事
首先观察冰箱内灯是否亮起,如果灯不亮,可能是断电保护电路故障。此外,还可以使用万用表测量继电器和定时器是否工作正常,以及检查线路连接是否牢固。
Carlo Gavazzi公司的发展小趣事

随着全球对环境保护和社会责任的日益关注,Carlo Gavazzi公司也积极承担起自己的社会责任。公司致力于开发环保型产品和技术,推动可持续发展。同时,公司还积极参与社会公益活动,回馈社会,赢得了广泛的社会认可和尊重。

这五个故事只是Carlo Gavazzi公司发展历史中的一部分,但它们足以展示这家公司在电子行业中的奋斗、创新和成功。作为一家具有悠久历史和深厚底蕴的企业,Carlo Gavazzi公司将继续在未来的发展中书写新的篇章。

Fermionics Lasertech Inc公司的发展小趣事

面对日益激烈的市场竞争,Fermionics Lasertech Inc公司始终坚持以创新为驱动力。他们不断投入研发资金,引进高端人才,加强与高校和科研机构的合作,共同推动激光技术的创新。公司成功研发出了一系列具有自主知识产权的新型激光器,不仅提升了产品性能,还降低了生产成本,使公司在激烈的市场竞争中保持领先地位。

Gem Asia Enterprise Co Ltd公司的发展小趣事

Gem Asia Enterprise最初是一家专注于电子元件生产的小型制造商。面对激烈的市场竞争,公司决定加大研发投入,专注于开发新型半导体材料。经过数年努力,Gem Asia成功研发出一种高效能、低功耗的半导体材料,并成功应用于智能手机和可穿戴设备中。这一创新不仅显著提升了产品的市场竞争力,还吸引了多家国际知名电子品牌的合作,使Gem Asia迅速在电子行业中崭露头角。

Hasco Relays and Electronics International Corp公司的发展小趣事

随着时间的推移,Harris公司逐渐与国防工业建立了紧密的联系。在二战及随后的冷战时期,Harris为军事机构提供了大量的通信设备和技术支持,包括雷达系统、导航系统以及加密通信设备等。这些技术不仅帮助军队在战场上保持高效的通信能力,还极大地提升了国家的国防安全水平。Harris在国防领域的卓越表现,进一步巩固了其在电子行业中的领先地位。

问答坊 | AI 解惑

跪求电子电路课程设计电子密码锁啊!!。

设计要求,设计一个电子密码锁,在开锁的状态下输入密码,密码共四位,用数据开关k1~k10分别表示0~9,输入密码用数码管显示,最后输入的密码显示在最右边的数码管上,即每输入一位数,密码在数码管上的显示左移一位,可删除输入的数字,删除的是最 ...…

查看全部问答>

protel99se的一个很好用的补丁。

绝对好用!直接双击使用。按鼠标滚轮能放大缩小原理图,按住鼠标右键能拖动原理图。…

查看全部问答>

Altera将举办系列免费技术巡展,不容错过啊 ~~

Altera公司宣布其将与代理商联手合作在2010年8月至9月期间在中国大陆9个城市举办免费的技术研讨会。很好的机会,不容错过哦在研讨会上可以了解到Altera系列产品是在高端数字系统设计上的应用。还将展示Altera解决方案如何推动视频和图像处理设计实 ...…

查看全部问答>

〖ST网站提供适用于STM32F105/107的USB和以太网函数库下载〗

STM3210C-EVAL评估版演示程序和使用手册。STM32_OTG_LIB —— STM32F105xx和STM32F107xx USB OTG函数库,使用手册STM32_ETH_Lib —— STM32F107xx互联型产品线以太网底层驱动,和基于uIP TCP/IP协议栈的网 ...…

查看全部问答>

求教各位一个问题

大家好,我在做EZ430RF项目,遇到一个问题:怎样把dat文件像头文件一样加入主程序,是有h图标那种哦如图:,啊看不见,麻烦各位去我相册里面看!!谢谢 [ 本帖最后由 lhqalex 于 2012-3-5 16:23 编辑 ]…

查看全部问答>

【聊聊DSP】对DSP如何学习将会影响到你将来的收入

    谈谈我对DSP的了解和学习         可能大家认为这题目怎么不一样?呵呵只是为了让大家更仔细认真的看完我发的帖子,大家提出你的想法,一起讨论。        首先:要感谢TI公司 ...…

查看全部问答>

请问.S43是什么文件啊?

最近拿到一个数据采集器项目的文件,打开里面全是.S43文件,而且是用汇编语言,和我一直用的.C文件有什么不同?而且.S43文件在output里,实在是不懂。。。看图片。。。 另外,最近在针对一个上位机和下位机通讯的协议编程,我觉得很难啊,协议的各 ...…

查看全部问答>

液晶面板反垄断,中国对三星等6家外企开出3.53亿元人民币罚单

本帖最后由 jameswangsynnex 于 2015-3-3 20:04 编辑 中国对境外企业价格垄断开出首张罚单——韩国三星、LG,中国台湾地区奇美、友达等六家国际大型面板生产商,因垄断液晶面板价格,遭到国家发改委经济制裁3.53亿元人民币。这也是迄今为止中国开 ...…

查看全部问答>