历史上的今天
今天是: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;。
史海拾趣
|
设计要求,设计一个电子密码锁,在开锁的状态下输入密码,密码共四位,用数据开关k1~k10分别表示0~9,输入密码用数码管显示,最后输入的密码显示在最右边的数码管上,即每输入一位数,密码在数码管上的显示左移一位,可删除输入的数字,删除的是最 ...… 查看全部问答> |
|
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协议栈的网 ...… 查看全部问答> |
|
谈谈我对DSP的了解和学习 可能大家认为这题目怎么不一样?呵呵只是为了让大家更仔细认真的看完我发的帖子,大家提出你的想法,一起讨论。 首先:要感谢TI公司 ...… 查看全部问答> |
|
最近拿到一个数据采集器项目的文件,打开里面全是.S43文件,而且是用汇编语言,和我一直用的.C文件有什么不同?而且.S43文件在output里,实在是不懂。。。看图片。。。 另外,最近在针对一个上位机和下位机通讯的协议编程,我觉得很难啊,协议的各 ...… 查看全部问答> |
|
液晶面板反垄断,中国对三星等6家外企开出3.53亿元人民币罚单 本帖最后由 jameswangsynnex 于 2015-3-3 20:04 编辑 中国对境外企业价格垄断开出首张罚单——韩国三星、LG,中国台湾地区奇美、友达等六家国际大型面板生产商,因垄断液晶面板价格,遭到国家发改委经济制裁3.53亿元人民币。这也是迄今为止中国开 ...… 查看全部问答> |






