一种补丁实现方法、装置、嵌入式系统及存储介质制造方法及图纸

技术编号:34691648 阅读:7 留言:0更新日期:2022-08-27 16:26
本申请提供一种补丁实现方法、装置、嵌入式系统及存储介质,当需要打补丁时,获取并存储与函数入口处设置有跳转操作指令的目标函数对应的补丁函数,然后将与目标函数对应的内存变量中的地址修改为指向补丁函数的地址,整个过程自动化进行,无需人工参与,另外,通过改变内存变量中的地址,便可跳转到补丁函数,无需改变函数调用语义,更便于代码优化和静态分析。析。析。

【技术实现步骤摘要】
一种补丁实现方法、装置、嵌入式系统及存储介质


[0001]本申请涉及数据处理
,具体而言,涉及一种补丁实现方法、装置、嵌入式系统及存储介质。

技术介绍

[0002]随着互联网技术的迅速发展,各种软件层出不穷,当软件出现BUG,或者需要升级增加新功能时,可以对软件对应的代码打补丁。现有的方案中需要软件开发人员手动对代码进行修改,并且需要改变函数调用语义。如果需要打补丁的点较多,软件开发人员的工作量大,而且容易引入新的BUG。

技术实现思路

[0003]本申请实施例的目的在于提供一种补丁实现方法、装置、嵌入式系统及存储介质,用以解决现有技术中,对软件打补丁时,需要人工改变函数调用语义,工作量大且容易引入新BUG的问题。
[0004]本申请实施例提供一种补丁实现方法,包括:
[0005]获取并存储与目标函数对应的补丁函数;所述目标函数的函数入口处设置有跳转操作指令;所述跳转操作指令用于在接收到针对所述目标函数的执行指令时,跳转到与所述目标函数对应的内存变量中的地址,以执行与所述地址对应的函数;
[0006]将所述内存变量中的地址修改为指向所述补丁函数的地址。
[0007]在上述实现过程中,当需要打补丁时,获取并存储与函数入口处设置有跳转操作指令的目标函数对应的补丁函数,然后将与目标函数对应的内存变量中的地址修改为指向补丁函数的地址,整个过程自动化进行,无需人工参与,另外,通过改变内存变量中的地址,便可跳转到补丁函数,无需改变函数调用语义,更便于代码优化和静态分析。/>[0008]进一步地,在所述获取并存储与目标函数对应的补丁函数之前,所述方法还包括:
[0009]获取源程序;
[0010]从所述源程序中确定待打补丁的函数;
[0011]在所述待打补丁的函数的函数入口处生成空操作指令;
[0012]针对所述待打补丁的函数生成对应的跳转操作指令;
[0013]将所述空操作指令替换为对应的所述跳转操作指令得到所述目标函数。
[0014]在上述实现过程中,在待打补丁的函数的函数入口处生成空操作指令,预留存储空间以备后续可以修改为跳转操作指令。
[0015]进一步地,所述在所述待打补丁的函数的函数入口处生成空操作指令,包括:
[0016]在对所述源程序进行编译的过程中,通过编译工具在所述待打补丁的函数的函数入口处生成空操作指令。
[0017]在上述实现过程中,直接通过编译工具在待打补丁的函数的函数入口处生成空操作指令,生成方式简单便捷。
[0018]进一步地,所述跳转操作指令用于在接收到针对所述目标函数的执行指令时,将与所述目标函数对应的内存变量中的地址加载到临时寄存器中,并跳转到所述临时寄存器所指向的地址。
[0019]在上述实现过程中,基于临时寄存器实现跳转操作,可以跳转到临时寄存器所指向的地址,扩大了跳转的空间范围。
[0020]进一步地,所述跳转操作指令的功能由一条扩展操作指令实现;所述扩展操作指令包括内存变量标识信息、寄存器标识信息以及操作码信息,所述扩展操作指令用于:从与内存变量地址对应的内存变量中,加载地址到所述寄存器标识信息对应的临时寄存器,并跳转到该临时寄存器所指向的地址;所述内存变量地址为根据对应的偏移地址以及基地址寄存器中的预设地址计算得到的地址,所述偏移地址为根据所述内存变量标识信息计算得到的地址。
[0021]在上述实现过程中,通过一条扩展操作指令实现跳转操作指令的功能,相比于通过多条操作指令实现该功能而言,可以节省程序占用的内存空间,并且可以提升处理器的执行效率。
[0022]进一步地,所述目标函数为预先设置在只读存储器中的函数。
[0023]在上述实现过程中,由于目标函数预先设置在只读存储器中,所以可以降低系统功耗,降低成本。
[0024]进一步地,所述获取并存储与目标函数对应的补丁函数,包括:
[0025]获取与目标函数对应的补丁函数,并将所述补丁函数存入数据可修改的存储器中。
[0026]在上述实现过程中,将补丁函数存入数据可修改的存储器中,便于后续对补丁函数进行修改。
[0027]进一步地,在将所述内存变量中的地址修改为指向所述补丁函数的地址之后,所述方法还包括:
[0028]获取与所述目标函数对应的新补丁函数;
[0029]将所述新补丁函数存入所述数据可修改的存储器中;
[0030]当所述新补丁函数在所述数据可修改的存储器中的起始地址与原始的所述补丁函数在所述数据可修改的存储器中的起始地址不同时,将所述内存变量中的地址修改为指向所述新补丁函数的地址。
[0031]在上述实现过程中,通过将内存变量中的地址修改为指向新补丁函数的地址,可以对目标函数打新的补丁。
[0032]进一步地,所述将所述新补丁函数存入所述数据可修改的存储器中,包括:
[0033]在确定所述新补丁函数所需占用的内存空间大小小于等于原始的所述补丁函数占用的内存空间大小时,从所述数据可修改的存储器中删除原始的所述补丁函数,并将所述新补丁函数存入原始的所述补丁函数的位置上;所述新补丁函数在所述数据可修改的存储器中的起始地址与原始的所述补丁函数在所述数据可修改的存储器中的起始地址相同;
[0034]在确定所述新补丁函数所需占用的内存空间大小大于原始的所述补丁函数占用的内存空间大小时,将所述新补丁函数存入可容纳所述新补丁函数的空闲空间,所述空闲空间为所述数据可修改的存储器中的空闲存储空间。
[0035]在上述实现过程中,一方面,当确定新补丁函数所需占用的内存空间大小小于等于原始的补丁函数占用的内存空间大小时,可以将新补丁函数覆盖在原始的补丁函数上,可以节省程序占用的内存资源,且由于新补丁函数在数据可修改的存储器中的起始地址与原始的补丁函数在数据可修改的存储器中的起始地址相同,所以此时无需对对应内存变量中的地址进行修改,所以可以提升处理效率;另一方面,当确定新补丁函数所需占用的内存空间大小大于原始的补丁函数占用的内存空间大小时,可以将新补丁函数存储在另外可容纳该函数的空闲空间上,然后将内存变量中的地址修改为指向新补丁函数的地址。
[0036]本申请实施例还提供了一种补丁实现装置,包括:
[0037]获取存储模块,用于获取并存储与目标函数对应的补丁函数;所述目标函数为函数入口处设置有跳转操作指令的待打补的函数;所述跳转操作指令用于在所述目标函数接收到执行指令时,控制跳转到与所述目标函数对应的内存变量中的地址,以执行与所述地址对应的函数;
[0038]修改模块,用于将所述内存变量中的地址修改为所述补丁函数当前的存储地址。
[0039]本申请实施例还提供了一种嵌入式系统,包括处理器和存储器,所述存储器中存储有计算机程序,所述处理器执行所述计算机程序,以实现上述任意一种方法。
[0040]本申请实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序本文档来自技高网...

【技术保护点】

【技术特征摘要】
1.一种补丁实现方法,其特征在于,包括:获取并存储与目标函数对应的补丁函数;所述目标函数的函数入口处设置有跳转操作指令;所述跳转操作指令用于在接收到针对所述目标函数的执行指令时,跳转到与所述目标函数对应的内存变量中的地址,以执行与所述地址对应的函数;将所述内存变量中的地址修改为指向所述补丁函数的地址。2.如权利要求1所述的补丁实现方法,其特征在于,在所述获取并存储与目标函数对应的补丁函数之前,所述方法还包括:获取源程序;从所述源程序中确定待打补丁的函数;在所述待打补丁的函数的函数入口处生成空操作指令;针对所述待打补丁的函数生成对应的跳转操作指令;将所述空操作指令替换为对应的所述跳转操作指令得到所述目标函数。3.如权利要求2所述的补丁实现方法,其特征在于,所述在所述待打补丁的函数的函数入口处生成空操作指令,包括:在对所述源程序进行编译的过程中,通过编译工具在所述待打补丁的函数的函数入口处生成空操作指令。4.如权利要求2所述的补丁实现方法,其特征在于,所述跳转操作指令用于在接收到针对所述目标函数的执行指令时,将与所述目标函数对应的内存变量中的地址加载到临时寄存器中,并跳转到所述临时寄存器所指向的地址。5.如权利要求4所述的补丁实现方法,其特征在于,所述跳转操作指令的功能由一条扩展操作指令实现;所述扩展操作指令包括内存变量标识信息、寄存器标识信息以及操作码信息,所述扩展操作指令用于:从与内存变量地址对应的内存变量中,加载地址到所述寄存器标识信息对应的临时寄存器,并跳转到该临时寄存器所指向的地址;所述内存变量地址为根据对应的偏移地址以及基地址寄存器中的预设地址计算得到的地址,所述偏移地址为根据所述内存变量标识信息计算得到的地址。6.如权利要求1所述的补丁实现方法,其特征在于,所述目标函数为预先设置在只读存储器中的函数。7.如权利要求1

6任一项所述的补丁实现方法,其特征在于,所述获取并存储与目标函数对应的补丁函数,包括:获取与目标函数对应的补丁函数,并将所述补丁函数存入数据可修改的存...

【专利技术属性】
技术研发人员:韦韧刘达
申请(专利权)人:上海物骐微电子有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1