补丁处理的方法和设备以及生成补丁的方法和设备的制造方法

文档序号:9810318阅读:364来源:国知局
补丁处理的方法和设备以及生成补丁的方法和设备的制造方法
【技术领域】
[0001]本发明涉及通信技术领域,特别是涉及一种补丁处理的方法和设备以及一种生成补丁文件的方法和设备。
【背景技术】
[0002]目前,为了修复程序漏洞或更新业务功能,各种电子设备可以通过补丁的方式对现有软件进行更新。例如,在各种通信网络中,网络设备通过补丁的方式对现有软件的更新,可以更新自身的通信业务功能。可以理解的是,在许多情况下,软件的更新需要在不中断软件运行的情况下进行。基于此,在线补丁技术应运而生。
[0003]在线补丁技术是以函数为单位对软件进行补丁的。图1所示的是一种现有的在线补丁技术。其中,软件中需要更新的原函数是第二函数,软件中第二函数是第一函数的调用对象,而补丁文件中包含有用于更新第二函数的第三函数,即第三函数是补丁函数。对于运行有该软件的设备来说,在利用补丁文件对软件进行补丁之后,当执行第一函数的过程中响应到调用第二函数的指令,第二函数的第一条指令指示该设备跳转去调用补丁文件中的第三函数,当执行完第三函数之后再返回到第一函数执行后续指令。可见,在设备运行软件的过程中,第三函数的执行替代了第二函数的执行,软件的更新得以实现。
[0004]需要说明的是,在线补丁技术通常应用于软件运行不能中断的场景中。例如,对于通信网络的网络设备来说,其通信业务需要由运行中的软件承载,而网络设备的通信业务是不能中断的,因此,网络设备的软件更新需要采用在线补丁技术。但是,发明人经过研究发现,采用现有的在线补丁技术对软件进行补丁更新之后,软件的运行却常常因异常、错误或故障而被中断。

【发明内容】

[0005]本发明实施例所要解决的技术问题是,提供一种补丁处理的方法和设备以及一种生成补丁文件的方法和设备,以解决现有技术中在在线补丁完成之后软件的运行容易发生中断的技术问题。
[0006]第一方面,本发明实施例提供了一种补丁处理方法,所述方法包括:
[0007]响应于执行到第一函数中的第一调用指令,跳转到第二函数;
[0008]响应于执行到所述第二函数的第一条指令,跳转到补丁文件的中间代码;
[0009]按照所述中间代码的指令,将所述第一函数的表地址和所述第一调用指令的返回地址保存到所述补丁文件的预留空间,所述第一函数的表地址为所述第一函数的表结构的地址,所述第一函数的表结构用于记录所述第一函数的调用对象的地址;
[0010]响应于执行到所述中间代码中的第二调用指令,跳转到所述补丁文件的第三函数,所述第三函数用于对所述第二函数进行更新;
[0011]响应于完成所述第三函数的执行,按照所述第二调用指令的返回地址,返回所述中间代码;
[0012]按照所述中间代码的指令,从所述预留空间中恢复所述第一函数的表地址和所述第一调用指令的返回地址;
[0013]按照所述第一调用指令的返回地址,返回所述第一函数。
[0014]可选的,所述方法还包括:
[0015]获取所述补丁文件,并按照所述补丁文件获取所述第二函数的地址;
[0016]根据所述第二函数的地址,在所述第二函数中添加用于跳转到所述中间代码的指令,作为所述第二函数的第一条指令。
[0017]可选的,所述方法还包括:
[0018]响应于所述返回所述第一函数,监测所述第一函数的执行是否出现故障;
[0019]当监测到所述第一函数的执行出现故障时,删除所述第二函数中用于跳转到所述中间代码的第一条指令。
[0020]第二方面,本发明实施例提供了一种生成补丁文件的方法,所述方法包括:
[0021]获取OBJ格式的补丁文件,并根据所述OBJ格式的补丁文件生成PAT格式的补丁文件;
[0022]其中,所述PAT格式的补丁文件包括第三函数、中间代码和预留空间;
[0023]所述第三函数用于对第二函数进行更新,所述第二函数为第一函数的调用对象;
[0024]所述中间代码用于在所述第二函数跳转到所述中间代码时保存所述第一函数的表地址和所述第一调用指令的返回地址到所述预留空间以及在所述第三函数返回所述中间代码时从所述预留空间恢复所述第一函数的表地址和所述第一调用指令的返回地址,所述第一函数的表地址为所述第一函数的表结构的地址,所述第一函数的表结构用于记录所述第一函数的调用对象的地址,所述第一调用指令为所述第一函数中用于调用所述第二函数的指令;
[0025]所述预留空间用于在所述中间代码调用所述第三函数的过程中存储所述第一函数的表地址和所述第一调用指令的返回地址。
[0026]可选的,所述根据所述OBJ格式的补丁文件生成PAT格式的补丁文件,包括:
[0027]对所述OBJ格式的补丁文件进行所述第三函数的重定位,并在所述OBJ格式的补丁文件中添加所述预留空间。
[0028]第三方面,本发明实施例提供了一种补丁处理设备,所述设备包括:
[0029]第一跳转单元,用于响应于执行到第一函数中的第一调用指令,跳转到第二函数;
[0030]第二跳转单元,用于响应于执行到所述第二函数的第一条指令,跳转到补丁文件的中间代码;
[0031]保存单元,用于按照所述中间代码的指令,将所述第一函数的表地址和所述第一调用指令的返回地址保存到所述补丁文件的预留空间,所述第一函数的表地址为所述第一函数的表结构的地址,所述第一函数的表结构用于记录所述第一函数的调用对象的地址;
[0032]第三跳转单元,用于响应于执行到所述中间代码中的第二调用指令,跳转到所述补丁文件的第三函数,所述第三函数用于对所述第二函数进行更新;
[0033]第一返回单元,用于响应于完成所述第三函数的执行,按照所述第二调用指令的返回地址,返回所述中间代码;
[0034]恢复单元,用于按照所述中间代码的指令,从所述预留空间中恢复所述第一函数的表地址和所述第一调用指令的返回地址;
[0035]第二返回单元,用于按照所述第一调用指令的返回地址,返回所述第一函数。
[0036]可选的,所述设备还包括:
[0037]第一获取单元,用于获取所述补丁文件;
[0038]第二获取单元,用于按照所述补丁文件获取所述第二函数的地址;
[0039]添加单元,用于根据所述第二函数的地址,在所述第二函数中添加用于跳转到所述中间代码的指令,作为所述第二函数的第一条指令。
[0040]可选的,所述设备还包括:
[0041]监测单元,用于响应于所述返回所述第一函数,监测所述第一函数的执行是否出现故障;
[0042]删除单元,用于当监测到所述第一函数的执行出现故障时,删除所述第二函数中用于跳转到所述中间代码的第一条指令。
[0043]第四方面,本发明实施例提供了一种生成补丁文件的设备,所述设备包括:
[0044]获取单元,用于获取OBJ格式的补丁文件;
[0045]生成单元,用于根据所述OBJ格式的补丁文件生成PAT格式的补丁文件;
[0046]其中,所述PAT格式的补丁文件包括第三函数、中间代码和预留空间;
[0047]所述第三函数用于对第二函数进行更新,所述第二函数为第一函数的调用对象;
[0048]所述中间代码用于在所述第二函数跳转到所述中间代码时保存所述第一函数的表地址和所述第一调用指令的返回地址到所述预留空间以及在所述第三函数返回所述中间代码时从所述预留空间恢复所述第一函数的表地址和所述第一调用指令的返回地址,所述第一函数的表地址为所述第一函数的表结构的地址,所述第一函数的表结构用于记录所述第一函数的调用对象的地址,所述第一调用指令为所述第一函数中用于调用所述第二函数的指令;
[0049]所述预留空间用于在所述中间代码调用所述第三函数的过程中存储所述第一函数的表地址和所述第一调用指令的返回地址。
[0050]可选的,所述生成单元包括:
[0051]重定位子单元,用于对所述OBJ格式的补丁文件进行所述第三函数的重定位;
[0052]添加子单元,用于在所述OBJ格式的补丁文件中添加所述预留空间。
[0053]与现有技术相比,本发明实施例至少具有以下优点:
[0054]在本发明实施例的技术方案中,补丁文件中包含有预留空间、中间代码和第三函数,其中,第三函数用于对第二函数进行更新,第二函数是第一函数的调用对象。当该补丁文件加载到软件之后,在软件运行的过程中,当执行到第一函数中用于调用第二函数的第一调用指令时跳转到第二函数,并在第二函数的第一条指令下跳转到补丁文件的中间代码,然后,按照中间代码的指令,保存第一函数的表地址和第一调用指令的返回地址到补丁文件的预留空间,当执行到中间代码中用于调用第三函数的第二调用指令时跳转到第三函数,当完成第三函数的执行时按照第二调用指令的返回地址返回所述中间代码,然后,按照中间代码的指令从预留空间恢复第一函数的表地址和第一调用指令的返回地址,再按照第一调用指令的返回地址返回第一函数。由此可见,在补丁文件的中间代码中,用于跳转至第三函数的第二调用指令之前具有用于保存第一函数的表地址的指令和用于保存第一调用指令的返回地址的指令,第二调用指令之后具有用于恢复第一函数的表地址的指令和用于保
当前第1页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1