首页
Web开发
Windows程序
编程语言
数据库
移动开发
系统相关
微信
其他好文
会员
首页
>
其他好文
> 详细
SDRAM和重定位(四)---链接地址和运行地址
时间:
2016-10-02 15:02:57
阅读:
170
评论:
0
收藏:
0
[点我收藏+]
标签:
在了解重定位之前,必须先区分开链接地址和运行地址,位置有关代码和位置无关代码
=========================================================
链接地址和运行地址:
链接地址:指在链接时指定的地址,是我们设想的将来程序要运行的地址。程序中所有标号的地址在链接后便确定了,不管程序在哪运行,都不会改变。
使用arm-linux-objdump反汇编查看的就是链接地址
。
运行地址:指程序在板子中实际运行的地址
从上面的定义可以看出,链接地址和运行地址可以相同,也可以不同。
=========================================================
位置有关代码和位置无关代码:
位置有关代码:从字面意思看就是该指令的执行是与内存地址有关的;
如果运行地址和链接地址不相等,那么执行到此种指令的时候将会出现程序跑飞的情况。
位置无关代码(PIC):从字面意思看就是该指令的执行是与内存地址无关的;
无论运行地址和链接地址相等或者不相等,此种指令都能正常运行
。
举几个例子:
b/bl label:属于位置无关代码,因为 b/bl 指令找到 label 的方法是根据当前 pc 的值结合偏移量来找到label
adr r0, label伪指令:属于位置无关代码,因为adr伪指令在汇编过程中会被替代成 add/sub pc, 偏移量的形式,可见也是基于当前pc和偏移量来找到 label
ldr r0,=label伪指令:属于位置有关代码,因为此伪指令将会被替代成 ldr r0, [pc, 偏移量]的形式,pc+偏移量中的内容将会是 label 的值,也就是链接时确定的地址。
=======================================================
重定位:
重定位就是将代码搬移到链接地址处去运行的动作。
uboot之所以要进行代码重定位:
是因为uboot的镜像太大了,不可能在iRAM中放得下,所以必须要放在 sdram 中运行,而BL1又必须在iRAM中运行,所以就需要进行代码重定位。
SDRAM和重定位(四)---链接地址和运行地址
标签:
原文地址:http://www.cnblogs.com/frank-yxs/p/5927489.html
踩
(
0
)
赞
(
0
)
举报
评论
一句话评论(
0
)
登录后才能评论!
分享档案
更多>
2021年07月29日 (22)
2021年07月28日 (40)
2021年07月27日 (32)
2021年07月26日 (79)
2021年07月23日 (29)
2021年07月22日 (30)
2021年07月21日 (42)
2021年07月20日 (16)
2021年07月19日 (90)
2021年07月16日 (35)
周排行
更多
分布式事务
2021-07-29
OpenStack云平台命令行登录账户
2021-07-29
getLastRowNum()与getLastCellNum()/getPhysicalNumberOfRows()与getPhysicalNumberOfCells()
2021-07-29
【K8s概念】CSI 卷克隆
2021-07-29
vue3.0使用ant-design-vue进行按需加载原来这么简单
2021-07-29
stack栈
2021-07-29
抽奖动画 - 大转盘抽奖
2021-07-29
PPT写作技巧
2021-07-29
003-核心技术-IO模型-NIO-基于NIO群聊示例
2021-07-29
Bootstrap组件2
2021-07-29
友情链接
兰亭集智
国之画
百度统计
站长统计
阿里云
chrome插件
新版天听网
关于我们
-
联系我们
-
留言反馈
© 2014
mamicode.com
版权所有 联系我们:gaon5@hotmail.com
迷上了代码!