函数调用关系确定方法、热补丁升级方法及装置制造方法及图纸

技术编号:8532618 阅读:287 留言:0更新日期:2013-04-04 15:30
本发明专利技术实施例提供一种函数调用关系确定方法、热补丁升级方法及装置,该函数调用关系确定方法包括:若判断出系统在调用函数时,未向栈中压入被调用的该函数的父函数的栈帧起始地址,则对栈中的至少一个返回地址依次进行查找,栈中包括至少一个返回地址;每次查找到至少一个返回地址中的一个返回地址时,确定当前查找到的返回地址对应的函数,根据返回地址对应的函数对记录表中记录的函数调用关系进行修正,使得修正后的函数调用关系中的被调用的该函数的父函数为返回地址对应的函数。本发明专利技术实施例提供的技术方案可以根据记录表中的函数名较为精确确定函数调用关系。

【技术实现步骤摘要】

本专利技术实施例涉及通信技术,尤其涉及一种函数调用关系确定方法、热补丁升级方法及装置
技术介绍
系统中运行的程序可能存在一些漏洞或安全隐患,补丁是一种用于修复这些问题的程序。常规情况下,如果要使用一个新的补丁就需要将程序打上补丁后编译,安装,然后重新启动系统。对一些关键性的业务,重新启动系统会造成业务的中断。热补丁技术就是针对这种需求设计的,它可以实现在不重启系统的情况下对系统打补丁。在热补丁项目中,寻找打入补丁的时机,确保系统稳定运行是一项关键技术。热补丁的特点是不重启系统应用补丁,如果补丁对一个尚未完成调用的函数进行了修改,待系统继续执行该函数的剩余部分时就有可能发生系统崩溃。安全性检测的目的是确保打入补丁时,系统所有任务都没有调用补丁所涉及的函数。现在通行的安全性检测方法是解析系统的内核栈,得到当前任务所调用的函数。将分析结果与补丁修改的函数列表进行对比,如果存在冲突就放弃这次补丁升级。过一定的时间后再次尝试这种安全性检测,直到冲突消失,安全地使用补丁代码。在实现本专利技术实施例的过程中,专利技术人发现现有技术中,针对系统在调用函数时不向栈中压入父函数栈帧起始地址的情况,并没有可以较为精确确定函数调用关系的方法,进一步会导致热补丁升级的安全性无法保证或者热补丁升级效率低。
技术实现思路
本专利技术实施例提供一种函数调用关系确定方法及装置,以实现较为精确确定函数调用关系。本专利技术实施例还提供一种热补丁升级方法及装置,用以保证热补丁升级的安全性,进而提高热补丁升级的效率。第一方面,提供一种函数调用关系确定方法,包括若判断出系统在调用函数时,未向栈中压入被调用的所述函数的父函数的栈帧起始地址,则对所述栈中的至少一个返回地址依次进行查找,所述栈中包括所述至少一个返回地址;每次查找到所述至少一个返回地址中的一个返回地址时,确定当前查找到的所述返回地址对应的函数,根据所述返回地址对应的函数对记录表中记录的函数调用关系进行修正,使得修正后的函数调用关系中的所述被调用的该函数的父函数为所述返回地址对应的函数。在第一方面的第一种可能的实现方式中,所述记录表包括第一记录表和第二记录表,其中第一记录表和第二记录表均包括一个或多个函数名,其中一个函数名表示所述函数名的前一个函数名对应的函数的父函数,也表示所述函数名的后一个函数名对应的函数的子函数;所述确定当前查找到的所述返回地址对应的函数,根据所述返回地址对应的函数对记录表中记录的函数调用关系进行修正,包括根据当前查找到的返回地址确定引起所述当前查找到的返回地址入栈的、表示函数调用的操作码,若所述操作码的寻址类型为间接寻址,则根据所述操作码确定所述被调用的函数;若所述第一记录表中记录有所述被调用的函数的函数名,则将所述第一记录表中记录的处于所述被调用的函数之后的所有函数名删除,将所述返回地址对应函数的函数名作为所述被调用的该函数的父函数的函数名记录在第一记录表中所述被调用的函数的函数名之后的位置上,并将所述第二记录表中记录的函数名清空;若所述第一记录表中没有记录所述被调用的函数的函数名,且所述第二记录表中记录有所述被调用的函数的函数名,则将所述第二记录表中记录的所述被调用的函数的函数名以及处于所述被调用的函数的函数名之前的所有函数名以及所述返回地址对应的函数的函数名记录在所述第一记录表中,并将所述第二记录表中记录的函数名清空;其中所述返回地址对应的函数的函数名作为所述被调用的该函数的父函数的函数名被记录在所述被调用的函数的函数名的后面;其中,所述对所述栈中的至少一个返回地址依次进行查找,包括若所述第二记录表中没有记录所述被调用的函数的函数名,则查找所述栈中的下一个返回地址。根据第一方面,在第一方面的第二种可能的实现方式中,所述记录表包括第一记录表和第二记录表;其中,所述第一记录表或第二记录表包括所述被调用的函数的函数名、所述被调用的函数的子函数的函数名以及所述被调用的该函数的父函数的函数名;所述确定当前查找到的所述返回地址对应的函数,根据所述返回地址对应的函数对记录表中记录的函数调用关系进行修正,包括根据当前查找到的返回地址确定引起所述当前查找到的返回地址入栈的、表示函数调用的操作码,若所述操作码的寻址类型为间接寻址,则根据所述操作码确定所述被调用的函数;若所述第一记录表中记录有所述被调用的函数的函数名,则将所述第一记录表中记录的所述被调用的该函数的父函数的函数名,以及所述被调用的该函数的父函数的父函数的函数名,以此类推,直至最后一个父函数的函数名删除,将所述返回地址对应函数的函数名作为所述被调用的该函数的父函数的函数名记录在第一记录表中,并将所述第二记录表中记录的函数名清空;若所述第一记录表中没有记录所述被调用的函数的函数名,且所述第二记录表中记录有所述被调用的函数的函数名,则将所述第二记录表中记录的函数调用关系中的所述被调用的函数的函数名、所述被调用的函数的子函数的函数名、所述被调用的函数的子函数的子函数的函数名,以此类推,直至最后一个子函数的函数名以及所述返回地址对应的函数的函数名记录在所述第一记录表中,并将所述第二记录表中记录的函数名清空;其中所述返回地址对应的函数的函数名为所述被调用的该函数的父函数的函数名;其中,所述对所述栈中的至少一个返回地址依次进行查找,包括若所述第二记录表中没有记录所述被调用的函数的函数名,则查找所述栈中的下一个返回地址。结合第一方面的第一种或第二种可能的实现方式,在第一方面的第三种可能的实现方式中,所述确定当前查找到的所述返回地址对应的函数,根据所述返回地址对应的函数对记录表中记录的函数调用关系进行修正,还包括若所述操作码的寻址类型为直接寻址,则将所述返回地址对应的函数的函数名作为上一个返回地址对应的函数的父函数的函数名记录在所述第二记录表中。结合第一方面的第一种、第二种或第三种可能的实现方式,在第一方面的第四种可能的实现方式中,所述方法还包括若查找完所述栈,且所述第二记录表不为空,则将所述第二记录表中记录的函数名添加到所述第一记录表中,并将所述第二记录表中记录的函数名清空。结合第一方面的第一种、第二种或第三种可能的实现方式,在第一方面的第五种可能的实现方式中,所述对所述栈中的至少一个返回地址依次进行查找之前,所述方法还包括确定所述系统调用的最后一个函数的函数名,将所述被调用的最后一个函数的函数名记录在初始状态为空的第一记录表中。结合第一方面的第一种、第二种、第三种、第四种或第五种可能的实现方式,在第一方面的第六种可能的实现方式中,所述根据当前查找到的返回地址确定引起所述当前查找到的返回地址入栈的、表示函数调用的操作码,包括将所述当前查找到的返回地址减去预设字节数,得到查找地址,从所述查找地址开始读取所述预设字节数的数据,根据所述数据确定引起所述当前查找到的返回地址入栈的、表示函数调用的操作码。结合第一方面的第一种、第二种、第三种、第四种、第五种或第六种可能的实现方式,在第一方面的第七种可能的实现方式中,所述方法还包括若判断出所述系统在调用函数时,向所述栈中压入被调用的所述函数的父函数的栈帧起始地址,则根据所述栈中的父函数的栈帧起始地址确定所述函数调用关系。第二方面,提供一种热补丁升级方法,包括若判断出系统在调用函数时,未向栈中压入被调本文档来自技高网...

【技术保护点】
一种函数调用关系确定方法,其特征在于,包括:若判断出系统在调用函数时,未向栈中压入被调用的所述函数的父函数的栈帧起始地址,则对所述栈中的至少一个返回地址依次进行查找,所述栈中包括所述至少一个返回地址;每次查找到所述至少一个返回地址中的一个返回地址时,确定当前查找到的所述返回地址对应的函数,根据所述返回地址对应的函数对记录表中记录的函数调用关系进行修正,使得修正后的函数调用关系中的所述被调用的该函数的父函数为所述返回地址对应的函数。

【技术特征摘要】
1.一种函数调用关系确定方法,其特征在于,包括若判断出系统在调用函数时,未向栈中压入被调用的所述函数的父函数的栈帧起始地址,则对所述栈中的至少一个返回地址依次进行查找,所述栈中包括所述至少一个返回地址;每次查找到所述至少一个返回地址中的一个返回地址时,确定当前查找到的所述返回地址对应的函数,根据所述返回地址对应的函数对记录表中记录的函数调用关系进行修正,使得修正后的函数调用关系中的所述被调用的该函数的父函数为所述返回地址对应的函数。2.根据权利要求1所述的函数调用关系确定方法,其特征在于,所述记录表包括第一记录表和第二记录表,其中第一记录表和第二记录表均包括一个或多个函数名,其中一个函数名表示所述函数名的前一个函数名对应的函数的父函数,也表示所述函数名的后一个函数名对应的函数的子函数;所述确定当前查找到的所述返回地址对应的函数,根据所述返回地址对应的函数对记录表中记录的函数调用关系进行修正,包括根据当前查找到的返回地址确定引起所述当前查找到的返回地址入栈的、表示函数调用的操作码,若所述操作码的寻址类型为间接寻址,则根据所述操作码确定所述被调用的函数;若所述第一记录表中记录有所述被调用的函数的函数名,则将所述第一记录表中记录的处于所述被调用的函数之后的所有函数名删除,将所述返回地址对应函数的函数名作为所述被调用的该函数的父函数的函数名记录在第一记录表中所述被调用的函数的函数名之后的位置上,并将所述第二记录表中记录的函数名清空;若所述第一记录表中没有记录所述被调用的函数的函数名,且所述第二记录表中记录有所述被调用的函数的函数名,则将所述第二记录表中记录的所述被调用的函数的函数名以及处于所述被调用的函数的函数名之前的所有函数名以及所述返回地址对应的函数的函数名记录在所述第一记录表中,并将所述第二记录表中记录的函数名清空;其中所述返回地址对应的函数的函数名作为所述被调用的该函数的父函数的函数名被记录在所述被调用的函数的函数名的后面;其中,所述对所述栈中的至少一个返回地址依次进行查找,包括若所述第二记录表中没有记录所述被调用的函数的函数名,则从低地址开始往高地址的方向,查找所述栈中的下一个返回地址。3.根据权利要求1所述的函数调用关系确定方法,其特征在于,所述记录表包括第一记录表和第二记录表;其中,所述第一记录表或第二记录表包括所述被调用的函数的函数名、所述被调用的函数的子函数的函数名以及所述被调用的该函数的父函数的函数名;所述确定当前查找到的所述返回地址对应的函数,根据所述返回地址对应的函数对记录表中记录的函数调用关系进行修正,包括根据当前查找到的返回地址确定引起所述当前查找到的返回地址入栈的、表示函数调用的操作码,若所述操作码的寻址类型为间接寻址,则根据所述操作码确定所述被调用的函数;若所述第一记录表中记录有所述被调用的函数的函数名,则将所述第一记录表中记录的所述被调用的函数的父函数的函数名,以及所述被调用的该函数的父函数的父函数的函数名,以此类推,直至最后一个父函数的函数名删除,将所述返回地址对应函数的函数名作为所述被调用的该函数的父函数的函数名记录在第一记录表中,并将所述第二记录表中记录的函数名清空;若所述第一记录表中没有记录所述被调用的函数的函数名,且所述第二记录表中记录有所述被调用的函数的函数名,则将所述第二记录表中记录的函数调用关系中的所述被调用的函数的函数名、所述被调用的函数的子函数的函数名、所述被调用的函数的子函数的子函数的函数名,以此类推,直至最后一个子函数的函数名以及所述返回地址对应的函数的函数名记录在所述第一记录表中,并将所述第二记录表中记录的函数名清空;其中所述返回地址对应的函数的函数名为所述被调用的该函数的父函数的函数名;其中,所述对所述栈中的至少一个返回地址依次进行查找,包括若所述第二记录表中没有记录所述被调用的函数的函数名,则从低地址开始往高地址的方向,查找所述栈中的下一个返回地址。4.根据权利要求2或3所述的函数调用关系确定方法,其特征在于,所述确定当前查找到的所述返回地址对应的函数,根据所述返回地址对应的函数对记录表中记录的函数调用关系进行修正,还包括若所述操作码的寻址类型为直接寻址,则将所述返回地址对应的函数的函数名作为上一个返回地址对应的函数的父函数的函数名记录在所述第二记录表中。5.根据权利要求2或3或4所述的函数调用关系确定方法,其特征在于,所述方法还包括若查找完所述栈,且所述第二记录表不为空,则将所述第二记录表中记录的函数名添加到所述第一记录表中,并将所述第二记录表中记录的函数名清空。6.根据权利要求2或3或4所述的函数调用关系确定方法,其特征在于,所述对所述栈中的至少一个返回地址依次进行查找之前,所述方法还包括确定所述系统调用的最后一个函数的函数名,将所述被调用的最后一个函数的函数名记录在初始状态为空的第一记录表中。7.根据权利要求2飞任一项所述的函数调用关系确定方法,其特征在于,所述根据当前查找到的返回地址确定引起所述当前查找到的返回地址入栈的、表示函数调用的操作码,包括将所述当前查找到的返回地址减去预设字节数,得到查找地址,从所述查找地址开始读取所述预设字节数的数据,根据所述数据确定引起所述当前查找到的返回地址入栈的、表示函数调用的操作码。8.根据权利要求Γ7任一项所述的函数调用关系确定方法,其特征在于,所述方法还包括若判断出所述系统在调用函数时,向所述栈中压入被调用的所述函数的父函数的栈帧起始地址,则根据所述栈中的父函数的栈帧起始地址确定所述函数调用关系。9.一种热补丁升级方法,其特征在于,包括若判断出系统在调用函数时,未向栈中压入被调用的所述函数的父函数的栈帧起始地址,则对所述栈中的至少一个返回地址依次进行查找,所述栈中包括所述至少一个返回地址;每次查找到所述至少一个返回地址中的一个返回地址时,确定当前查找到的所述返回地址对应的函数,根据所述返回地址对应的函数对记录表中记录的函数调用关系进行修正,使得修正后的函数调用关系中的所述被调用的该函数的父函数为所述返回地址对应的函数。对比修正后的记录表中记录的函数调用关系中的函数名与获取到的补丁升级所要修改的函数列表中的函数名,若不存在相同项,则进行补丁升级。10.根据权利要求9所述的热补丁升级方法,其特征在于,所述记录表包括第一记录表和第二记录表,其中第一记录表和第二记录表均包括一个或多个函数名,其中一个函数名表示所述函数名的前一个函数名对应的函数的父函数,也表示所述函数名的后一个函数名对应的函数的子函数;所述确定当前查找到的所述返回地址对应的函数,根据所述返回地址对应的函数对记录表中记录的函数调用关系进行修正,包括根据当前查找到的返回地址确定引起所述当前查找到的返回地址入栈的、表示函数调用的操作码,若所述操作码的寻址类型为间接寻址,则根据所述操作码确定所述被调用的函数;若所述第一记录表中记录有所述被调用的函数的函数名,则将所述第一记录表中记录的处于所述被调用的函数之后的所有函数名删除,将所述返回地址对应函数的函数名作为所述被调用的该函数的父函数的函数名记录在第一记录表中所述被调用的函数的函数名之后的位置上,并将所述第二记录表中记录的函数名清空;若所述第一记录表中没有记录所述被调用的函数的函数名,且所述第二记录表中记录有所述被调用的函数的函数名,则将所述第二记录表中记录的所述被调用的函数的函数名以及处于所述被调用的函数的函数名之前的所有函数名以及所述返回地址对应的函数的函数名记录在所述第一记录表中,并将所述第二记录表中记录的函数名清空;其中所述返回地址对应的函数的函数名作为所述被调用的该函数的父函数的函数名被记录在所述被调用的函数的函数名的后面;其中,所述对所述栈中的至少一个返回地址依次进行查找,包括若所述第二记录表中没有记录所述被调用的函数的函数名,则从低地址开始往高地址的方向,查找所述栈中的下一个返回地址。11.根据权利要求9所述的热补丁升级方法,其特征在于,所述记录表包括第一记录表和第二记录表;其中,所述第一记录表或第二记录表包括所述被调用的函数的函数名、所述被调用的函数的子函数的函数名以及所述被调用的该函数的父函数的函数名;所述确定当前查找到的所述返回地址对应的函数,根据所述返回地址对应的函数对记录表中记录的函数调用关系进行修正,包括根据当前查找到的返回地址确定引起所述当前查找到的返回地址入栈的、表示函数调用的操作码,若所述操作码的寻址类型为间接寻址,则根据所述操作码确定所述被调用的函数;若所述第一记录表中记录有所述被调用的函数的函数名,则将所述第一记录表中记录的所述被调用的该函数的父函数的函数名,以及所述被调用的该函数的父函数的父函数的函数名,以此类推,直至最后一个父函数的函数名删除,将所述返回地址对应函数的函数名作为所述被调用的该函数的父函数的函数名记录在第一记录表中...

【专利技术属性】
技术研发人员:陶原李俊
申请(专利权)人:华为技术有限公司
类型:发明
国别省市:

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

1