【技术实现步骤摘要】
一种程序处理方法、装置及设备
本申请涉及计算机领域,尤其涉及一种程序处理方法、装置及设备。
技术介绍
在实际应用中,程序在运行时可能会出现一些问题,及时的对问题进行处理(例如对问题进行定位或修复)非常重要。而在一些环境下,例如电信行业,程序一旦被运行过程就不能被重新启动,所以如何在不中断程序运行的情况下实现对程序问题的处理,是目前程序研究的焦点。一个主程序往往包括一个或多个子函数,主程序出现问题的根本原因是子函数出现问题。在主程序运行过程中,通常采用在线补丁技术对子函数进行处理。在线补丁技术的原理是:为子函数编写一段补丁程序,补丁程序涵盖该子函数,该补丁程序的用途可以例如为在子函数执行的过程中对子函数进行监控,或者对子函数输出的结果进行修改等等;然后,在子函数被调用时,跳转执行该补丁程序,最终执行的是该补丁程序而不是子函数。虽然在线补丁技术能够实现在主程序运行过程中对子函数的处理,但是补丁程序的生成需要子函数的原始代码,如果没有原始代码,则无法生成该补丁程序,所以应用范围受限。
技术实现思路
本申请实施例提供了一种程序处理方法、装置及设备,用于在不需要子函数的原始代码的前提下实现主程序在运行过程中对子函数的处理。第一方面,本申请实施例提供了一种程序处理方法,该方法可以应用于用户设备或服务器等设备,其中,用户设备可以包括个人计算机(personalcomputer,PC)、手机、平板电脑等。该程序处理方法包括如下步骤:首先,获取主程序和目标函数,其中,一个主程序可以包括一个或 ...
【技术保护点】
1.一种程序处理方法,其特征在于,所述方法包括:/n获取主程序和目标函数,所述主程序包括子函数,所述目标函数用于在所述子函数被调用时对所述子函数进行处理;/n在所述主程序运行过程中,在所述子函数中插入所述目标函数;/n当所述子函数被调用时,执行所述目标函数和所述子函数。/n
【技术特征摘要】
1.一种程序处理方法,其特征在于,所述方法包括:
获取主程序和目标函数,所述主程序包括子函数,所述目标函数用于在所述子函数被调用时对所述子函数进行处理;
在所述主程序运行过程中,在所述子函数中插入所述目标函数;
当所述子函数被调用时,执行所述目标函数和所述子函数。
2.根据权利要求1所述的方法,其特征在于,所述目标函数包括入口函数和/或出口函数;
所述在所述子函数中插入目标函数包括:
在所述子函数的入口插入所述入口函数,和/或,在所述子函数的出口插入所述出口函数。
3.根据权利要求1或2所述的方法,其特征在于,所述方法还包括:
获取所述目标函数的地址;
所述在所述子函数中插入所述目标函数包括:
申请第一内存区;
复制所述子函数,并将复制后的子函数存储在所述第一内存区中;
将所述子函数替换为第一指令集,所述第一指令集用于在所述子函数被调用时,根据所述第一内存区的地址执行所述复制后的子函数,以及根据所述目标函数的地址执行所述目标函数;
所述在所述子函数被调用时,执行所述目标函数和所述子函数包括:
在所述子函数被调用时,执行所述第一指令集。
4.根据权利要求3所述的方法,其特征在于,所述第一指令集包括第一跳转指令;所述第一指令集用于在所述子函数被调用时,根据所述第一内存区的地址执行所述复制后的子函数,以及根据所述目标函数的地址执行所述目标函数包括:
所述第一跳转指令用于在所述子程序被调用时,跳转到第二内存区,所述第二内存区中存储有第二指令集和第三指令集;其中,所述第二指令集用于在所述第一跳转指令被触发之后,根据所述第一内存区的地址跳转到所述第一内存区,执行所述复制后的子程序;所述第三指令集用于在所述第一跳转指令被触发之后,根据所述目标程序的地址执行所述目标程序。
5.根据权利要求4所述的方法,其特征在于,所述方法还包括:
预先建立索引号与所述目标函数的地址以及所述第一内存区的地址之间的映射关系;
所述第一指令集包括存储指令,所述存储指令用于将所述索引号存储在寄存器或所述子函数的栈空间中;
所述第二指令集包括第一查询指令和第二跳转指令,所述第一查询指令用于在所述第一跳转指令被触发之后根据寄存器或所述子函数的栈空间中的索引号和所述映射关系获取所述第一内存区的地址,所述第二跳转指令用于根据所述第一内存区的地址跳转到所述第一内存区;
所述第三指令集包括第二查询指令和第三跳转指令,所述第二查询指令用于在所述第一跳转指令被触发之后根据所述寄存器或所述子函数的栈空间中的索引号和所述映射关系获取所述目标函数的地址,所述第三跳转指令用于根据所述目标程序的地址执行所述目标程序。
6.根据权利要求3-5任一项所述的方法,其特征在于,所述复制所述子函数,并将复制后的子函数存储在所述第一内存区中包括:
复制所述子函数的前N条指令,并将复制后的所述前N条指令存储在所述第一内存区;
在所述第一内存区中生成第四跳转指令,所述第四跳转指令用于在所述复制后的所述前N条指令被执行之后,跳转到所述子函数的第N+1条指令,并从所述子函数的第N+1条指令开始执行,直到执行完成所述子函数的最后一条指令;
所述将所述子函数替换为第一指令集包括:
将所述子函数的前N条指令替换为第一指令集,所述N为大于或等于1的整数,所述前N条指令的长度大于或等于所述第一指令集的长度。
7.根据权利要求3-6任一项所述的方法,其特征在于,在将所述子函数替换为第一指令集之前,所述方法还包括:
获取所述子函数的起始地址;
在将所述子函数替换为第一指令集之后,所述方法还包括:
根据所述子函数的起始地址,将所述第一指令集替换为所述第一内存区中存储的所述复制后的子函数。
8.一种程序处理装置,其特征在于,所述装置包括:
函数获取单元,用于获取主程序和目标函数,所述主程序包括子函数,所述目标函数用于在所述子函数被调用时对所述子函数进行处理;<...
【专利技术属性】
技术研发人员:张建涛,李章涛,钟海峰,桂蕾,
申请(专利权)人:北京华为数字技术有限公司,
类型:发明
国别省市:北京;11
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。