[发明专利]一种程序动态加载方法、装置及存储介质有效
| 申请号: | 202010221160.4 | 申请日: | 2020-03-26 |
| 公开(公告)号: | CN111124550B | 公开(公告)日: | 2020-07-03 |
| 发明(设计)人: | 韩辉 | 申请(专利权)人: | 北京翼辉信息技术有限公司 |
| 主分类号: | G06F9/445 | 分类号: | G06F9/445;G06F8/41 |
| 代理公司: | 北京智乾知识产权代理事务所(普通合伙) 11552 | 代理人: | 邓大为 |
| 地址: | 100095 北京*** | 国省代码: | 北京;11 |
| 权利要求书: | 查看更多 | 说明书: | 查看更多 |
| 摘要: | |||
| 搜索关键词: | 一种 程序 动态 加载 方法 装置 存储 介质 | ||
1.一种程序动态加载方法,其特征在于,该方法包括:
编译步骤,采用编译参数将源代码编译为地址无关的程序文件;
重定位预处理步骤,对所述程序文件根据重定位项类型进行计算得出重定位地址和需要填写到重定位地址的逻辑地址;
加载步骤,将重定位预处理的程序文件下载到FLASH后,基于计算得出的所述重定位地址和需要填写到重定位地址的逻辑地址加载程序运行需要的数据,直接在FLASH中运行所述程序文件;
所述采用编译参数将源代码编译为地址无关的程序文件的操作为:将编译器的编译参数设置为:-fPIC 和-mno-pic-data-is-text-relative -msingle-pic-base -mpic-register=9,-fPIC用于生成位置无关的编译代码,-mno-pic-data-is-text-relative -msingle-pic-base -mpic-register=9用于生成代码段与数据段分离的代码,并指定R9寄存器为代码段寄存器,其中所述程序文件包括相分离的代码段和数据段,且在编译后将调用elf2app工具将数据段的变量访问指令修改成R9+偏移方式,所述elf2app识别不同的变量访问指令以及跳转指令,根据变量访问指令以及跳转指令的结构计算出目标地址,并根据所述目标地址生成通过R9寄存器访问的相应指令以替换现有的相应指令;
在重定位预处理时,针对ELF中的所有重定位项,根据重定位项类型进行查找和运算,将ELF重定位项转换成重定位数组保存在可执行程序文件中,所述重定位数组包括重定位地址和该地址应写入的逻辑地址;
重定位预处理完成后对所述可执行程序文件处理,所述处理包括:删除所述可执行程序文件的无关节区和数据,将text段和data段组装成新的可执行程序文件,将加载时所需要的信息记录到新的可执行程序文件的文件头中,所述新的可执行程序文件可下载到FLASH任意位置;
在加载过程中,根据所述文件头中的信息计算出text段和data段的位置,拷贝data段,并设置data段起始地址到R9,然后根据text段和data段地址以及所述文件头中的重定位数组执行剩余的重定位操作,重定位操作完成后直接在FLASH中运行程序文件。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京翼辉信息技术有限公司,未经北京翼辉信息技术有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202010221160.4/1.html,转载请声明来源钻瓜专利网。
- 上一篇:一种基于5G物联网的医院楼宇防疫系统
- 下一篇:数字签名方法、设备和存储介质





