第四章编译基础知识之重定位
要解释重定位,首先需要理解程序是怎么链接的。程序链接的时候可以通过链接脚本将程序链接到指定地址上,可以链接成地址相关码也可以链接成地址无关码。
顾名思义,地址相关码就是把程序链接到指定地址上,在嵌入式开发中经常用到地址相关码的编译。由于嵌入式的板子资源有限,需要规划内存的使用,就需要合理规划bios、操作系统、嵌入式软件的地址。地址无关码就是程序可以被加载到任意地址上,但是程序的指令编译之后就是固定的,在函数调用、全局变量的使用的时候如何正确定位到指定地址上呢?
举一个例子,如果我们链接的地址是0x00000000,被调用的函数被链接到0x00010000上,如果指令的逻辑直接跳转到0x00010000,那就是地址相关码。如果要把程序加载到0x00200000上,那被调用的函数就被加载到0x002100000上,要想让指令正确运行,就需要做重定位。
常用的重定位技术是,将所有的全局符号放在全局偏移表中,在elf文件中就是.got段,如果涉及动态库的话就是.got.plt段。全局偏移表中放着全局符号的地址,由于链接的过程中知道全局偏移表的位置,只需要将代码从当前位置跳到全局偏移表,然后从全局偏移表中读入值,再跳到全局偏移表的值就好了。
那么,全局偏移表中的值,在链接阶段是不知道的,需要程序运行之前修改成正确的地址,这一过程就叫重定位。
还是刚刚的例子,全局偏移表中存0x00010000,重定位的时候计算加载的偏移为0x00200000-0x00000000=0x002000000,修改全局偏移表的值为0x00010000+0x002000000=0x002100000。然后程序运行的时候指令跳转到全局偏移表读到的地址就是0x002100000,那么函数就能调用的正确的地址了。全局变量的重定位类似。
但是,需要格外注意的是,最近几年国产化盛行。龙芯的mips指令是一个特例。简单介绍一下,mips本身不是龙芯发明的,但是现在找遍全球的芯片厂商,可能也就是龙芯在用mips指令集。
mips指令集是一个定长的指令集,跟x86有很大区别。mips有两个非常关键的寄存器gp还有$t9,有做这方面的同学需要要自己研究下。
mips指令集也是非常有意思,函数的前两行指令非常关键,也可以用来做一些意想不到的设计。如果你想把数据段和代码段分开放,可以研究研究这两行指令。对于有些特殊的行业的无扰加载程序非常友好。
mips的常量的分页机制也非常有意思,有兴趣的同学可以研究下,虽然就重定位来说,常量如果被放在.rodata段,其重定位的方法和全局变量完全一样,但是这种分页机制可以让我在许多其他方面的设计上借鉴。
要想完全将明白重定位,可能需要写一本书,我这里知识大概介绍一下相关知识,需要了解的同学可能需要大量的研究和实践。
祝好。
人类社会科学技术是把双刃剑育邻梦网友提问人工智能一定能打破人力生产效率递减的僵局吗?回复人类社会科学技术是把双刃剑,它提升了人类社会生产劳动协同效率。但是,它的大规模替代人类劳动计划,正在稀释人类社会的综合
未来人类会被机器人取代吗?个人认为不会。而是身体的各部分逐渐被机器替代,变成半机械生化人。首先我们要认同一个事情,科技产品的发展速度是极快的。从莱特兄弟发明第一架飞机,到美国人登上月球,只用了六十多年的时间
我国科学家构建合成类胡萝卜素细胞工厂新京报讯(记者周怀宗)随着技术的发展,人类越来越多地开始了解微观世界的运行规律,近日,记者从中国农业科学院获悉,自然通讯在线发表了中国农业科学院深圳农业基因组研究所黄三文团队和美国
中国移动中国联通中国电信发布重要公告每经编辑毕陆名2月21日晚间,中国移动中国联通中国电信等通信巨头发布2022年1月份的主要运营数据。中国移动5G套餐客户数4。0127亿户中国移动(00941。HK)公告2022年
手机充电到100再拔?原来我们都做错了,正确充电可延长电池寿命相信很多朋友啊都有过这样的感觉,就是以前手机充一次电呢可以用一两天,而现在充一次电的基本用不到半天就没电了,那出现这种情况啊,我们排除电池自然老化的因素,那其实很多时候啊都是由于我
远程办公会不会在未来五到十年成为普遍现象?央视网消息为应对新冠肺炎疫情,日本技术企业富士通公司宣布,位于日本的办公空间将缩减一半,同时启动居家工作计划,在日本工作的8万名富士通员工今后将以远程工作方式为主,从而使他们能够根
华为官宣!2月27号春季发布会就在今晚华为突然官宣自己春季发布会。华为官方预热将于2月27日晚上9点半举行华为智慧办公春季发布会,全球开启。本次发布会的主题为超级终端,超级创造力。图片中有五颗星球,是否暗示华为
东数西算IDC行业专家交流会1各个相关产业链都有上市公司缆通依米康(精密空调)英维克佳力图供电设备中恒电气(高压直流)科华数据(大容量UPS)科士达(UPS)易事特ICT设备华为浪潮长飞亨通光模块企业(中际旭
wma格式怎么转换mp3?用格式工厂软件转换一下格式,再试试看!一般电脑播放器兼容性要好一些,车载电脑播放器要弱一些!下面,一起来了解下将wma文件转成手机上支持播放的方法方法一直接更改文件后缀名这种方法虽
黑客一般都是怎么获得利益的?举个简单的例子。我成功黑入了你的电脑,获取权限后看到你D盘下面有个文件夹叫做工作,下面有个重要,里面还有个文件夹叫新签合同待归档,里面自然是近期签的重要合同,可能价值几百上千万,或
语音转文字的软件有哪些?不用会员的那种?微信上就有语音转文字的功能。专业点的Au等等好多呢我在应用商店翻看了一下,这类软件确实很多。不过,大多数是花样收费的青铜会员,白银会员,黄金会员,钻石会员,至尊豪华会员收费也各种1