首页 / 专利库 / 软件 / 补丁 / 热补丁 / 一种针对龙芯平台的热补丁方法及装置

一种针对龙芯平台的热补丁方法及装置

阅读:562发布:2020-05-13

专利汇可以提供一种针对龙芯平台的热补丁方法及装置专利检索,专利查询,专利分析的服务。并且本 发明 公开了一种针对龙芯平台的热 补丁 方法及装置,方法包括以下步骤:补丁文件制作;补丁文件加载。装置包括:制作模 块 ,用于制作补丁文件;加载模块,用于加载补丁文件。本发明实现了针对linux应用的 热补丁 技术,解决了在不重启设备、不中断业务的情况下对产品 缺陷 进行修补或者新增功能的问题,不仅可以随时对龙芯平台进行打补丁、修复缺陷,而且成熟稳定,适应性广,且实现简单,安全可靠。,下面是一种针对龙芯平台的热补丁方法及装置专利的具体信息内容。

1.一种针对龙芯平台的热补丁方法,其特征是,包括以下步骤:
补丁文件制作;
补丁文件加载。
2.根据权利要求1所述的一种针对龙芯平台的热补丁方法,其特征是,所述补丁文件包括需要加载的so文件、补丁文件对应的设备型号、补丁文件对应的软件系统版本信息和补丁文件校验信息。
3.根据权利要求1所述的一种针对龙芯平台的热补丁方法,其特征是,所述补丁文件加载过程具体为:
1)运行加载程序,通过ptrace将需要打补丁的进程attach,然后查找符号表,或者通过固定程序的偏移,找到dlopen,dlclose和malloc函数的地址;
2)将实现malloc调用的一段汇编代码拷贝到目标进程的一个安全的代码段,通过参数寄存器reg4和参数寄存器reg5)将需要malloc的长度和malloc函数地址传递进去,最后设置cp0_epc,将执行地址设置为刚刚拷贝过去的代码的起始地址;
3)加载程序再通过ptrace的PTRACE_CONT将目标进程恢复执行,如果执行成功,通过读返回值寄存器reg2,获取malloc的返回值,将补丁文件的路径存入;
4)执行dlopen函数。将malloc获取到的地址和dlopen函数的地址作为参数传入,执行dlopen成功后,会触发补丁文件中的__attribute__((constructor))函数执行;
5)补丁文件中的init函数查找到需要修复的函数地址,在该地址的入口处,使用jalr实现函数跳转,跳转到新函数的入口。
4.根据权利要求3所述的一种针对龙芯平台的热补丁方法,其特征是,执行dlopen成功后,加载程序通过还原一些被替换过的代码段,还原最开始保存的寄存器使目标进程继续执行。
5.根据权利要求3所述的一种针对龙芯平台的热补丁方法,其特征是,卸载补丁文件时,执行对应的dlclose将对应的库进行卸载,并触发__attribute__((destructor))函数将之前替换过的代码进行恢复。
6.根据权利要求1-5任意一项所述的一种针对龙芯平台的热补丁方法,其特征是,还包括以下步骤:
补丁文件校验。
7.根据权利要求6所述的一种针对龙芯平台的热补丁方法,其特征是,所述补丁文件校验的具体过程为:运行在设备上的加载程序,通过分析补丁文件的设备型号信息、软件系统信息和补丁文件校验信息来识别补丁文件是否是匹配的,否则会导致系统异常。
8.一种针对龙芯平台的热补丁装置,其特征是,包括:
制作模,用于制作补丁文件;
加载模块,用于加载补丁文件。
9.根据权利要求6所述的一种针对龙芯平台的热补丁装置,其特征是,还包括:
校验模块,用于校验补丁文件。
10.根据权利要求8或9所述的一种针对龙芯平台的热补丁装置,其特征是,所述补丁文件包括需要加载的so文件、补丁文件对应的设备型号、补丁文件对应的软件系统版本信息和补丁文件校验信息。

说明书全文

一种针对龙芯平台的热补丁方法及装置

技术领域

[0001] 本发明涉及一种针对龙芯平台的热补丁方法及装置,属于计算机软件技术领域。

背景技术

[0002] 当网络设备作为IT基础通信的关键设备部署后,一旦有缺陷导致网络中断或者异常,影响就非常大。所以网络设备的软件需要经过严苛的测试,但是系统缺陷是无法避免的,这就需要我们对系统进行升级。在传统实施中,需要根据业务情况,选择一个时间点,比如凌晨对设备实施升级然后重启。这种方法对运维人员和网络管理人员都带来了麻烦。
[0003] 目前针对网络设备的业务可持续性要求越来越高,所以有必要实现设备的热补丁功能。热补丁技术就是在不重启设备,不中断业务的情况下,对设备进行升级。这个热补丁是函数级别的修复,影响范围小。所以网络管理人员可以随时进行打补丁,对缺陷进行修复。
[0004] 龙芯是中国自主知识产权的芯片,符合自主可控的要求。广泛应用于国防,航天,政务等关键领域。而Linux操作系统具有开源,稳定,可定制,应用广泛等特点。所以基于龙芯的linux网络设备在许多需要安全可靠的领域具有广泛的用途。
[0005] 目前实现较多的都是针对x86芯片,操作系统也通常是针对vxworks。但是,市面上针对龙芯的linux系统热补丁方案还没有比较成熟的方法,无法做到在不重启设备的情况下实现应用的升级和缺陷修复。

发明内容

[0006] 针对以上方法存在的不足,本发明提出了一种针对龙芯平台的热补丁方法及装置,其能够对龙芯平台运行中的应用程序,实现不中断、不重启的热补丁修复。
[0007] 本发明解决其技术问题采取的技术方案是:
[0008] 一方面,本发明实施例提供的一种针对龙芯平台的热补丁方法,包括以下步骤:
[0009] 补丁文件制作;
[0010] 补丁文件加载。
[0011] 结合作为本实施例一种可能的实现方式,所述补丁文件包括需要加载的so文件、补丁文件对应的设备型号、补丁文件对应的软件系统版本信息和补丁文件校验信息。
[0012] 结合作为本实施例一种可能的实现方式,所述补丁文件加载过程具体为:
[0013] 1)运行加载程序,通过ptrace将需要打补丁的进程attach,然后查找符号表,或者通过固定程序的偏移,找到dlopen,dlclose和malloc函数的地址;
[0014] 2)将实现malloc调用的一段汇编代码拷贝到目标进程的一个安全的代码段,通过参数寄存器reg4和参数寄存器reg5)将需要malloc的长度和malloc函数地址传递进去,最后设置cp0_epc,将执行地址设置为刚刚拷贝过去的代码的起始地址;
[0015] 3)加载程序再通过ptrace的PTRACE_CONT将目标进程恢复执行,如果执行成功,通过读返回值寄存器reg2,获取malloc的返回值,将补丁文件的路径存入;
[0016] 4)执行dlopen函数。将malloc获取到的地址和dlopen函数的地址作为参数传入,执行dlopen成功后,会触发补丁文件中的__attribute__((constructor))函数执行;
[0017] 5)补丁文件中的init函数查找到需要修复的函数地址,在该地址的入口处,使用jalr实现函数跳转,跳转到新函数的入口。
[0018] 结合作为本实施例一种可能的实现方式,执行dlopen成功后,加载程序通过还原一些被替换过的代码段,还原最开始保存的寄存器使目标进程继续执行。
[0019] 结合作为本实施例一种可能的实现方式,卸载补丁文件时,执行对应的dlclose将对应的库进行卸载,并触发__attribute__((destructor))函数将之前替换过的代码进行恢复。
[0020] 结合作为本实施例一种可能的实现方式,所述热补丁方法还包括以下步骤:
[0021] 补丁文件校验。
[0022] 结合作为本实施例一种可能的实现方式,所述补丁文件校验的具体过程为:运行在设备上的加载程序,通过分析补丁文件的设备型号信息、软件系统信息和补丁文件校验信息来识别补丁文件是否是匹配的,否则会导致系统异常。
[0023] 另一方面,本发明实施例提供的一种针对龙芯平台的热补丁装置,包括:
[0024] 制作模,用于制作补丁文件;
[0025] 加载模块,用于加载补丁文件。
[0026] 结合作为本实施例一种可能的实现方式,所述热补丁装置还包括:
[0027] 校验模块,用于校验补丁文件。
[0028] 结合作为本实施例一种可能的实现方式,所述补丁文件包括需要加载的so文件、补丁文件对应的设备型号、补丁文件对应的软件系统版本信息和补丁文件校验信息。
[0029] 本发明实施例的技术方案可以具有的有益效果如下:
[0030] 针对使用龙芯Linux操作系统的交换机等网络产品,本发明实现了针对应用的热补丁技术,解决了在不重启设备、不中断业务的情况下对产品缺陷进行修补或者新增功能的问题,不仅可以随时对龙芯平台进行打补丁、修复缺陷,而且成熟稳定,适应性广,且实现简单,安全可靠。附图说明:
[0031] 图1是根据一示例性实施例示出的一种针对龙芯平台的热补丁方法的流程图
[0032] 图2是根据一示例性实施例示出的一种针对龙芯平台的热补丁装置的示意图。

具体实施方式

[0033] 下面结合附图与实施例对本发明做进一步说明:
[0034] 为能清楚说明本方案的技术特点,下面通过具体实施方式,并结合其附图,对本发明进行详细阐述。下文的公开提供了许多不同的实施例或例子用来实现本发明的不同结构。为了简化本发明的公开,下文中对特定例子的部件和设置进行描述。此外,本发明可以在不同例子中重复参考数字和/或字母。这种重复是为了简化和清楚的目的,其本身不指示所讨论各种实施例和/或设置之间的关系。应当注意,在附图中所图示的部件不一定按比例绘制。本发明省略了对公知组件和处理技术及工艺的描述以避免不必要地限制本发明。
[0035] 图1是根据一示例性实施例示出的一种针对龙芯平台的热补丁方法的流程图。如图1所述,本发明实施例提供的一种针对龙芯平台的热补丁方法,包括以下步骤:
[0036] 补丁文件制作;
[0037] 补丁文件加载。
[0038] 结合作为本实施例一种可能的实现方式,所述补丁文件包括需要加载的so文件、补丁文件对应的设备型号、补丁文件对应的软件系统版本信息和补丁文件校验信息。
[0039] 结合作为本实施例一种可能的实现方式,所述补丁文件加载过程具体为:
[0040] 1)运行加载程序,通过ptrace将需要打补丁的进程attach,然后查找符号表,或者通过固定程序的偏移,找到dlopen,dlclose和malloc函数的地址;
[0041] 2)将实现malloc调用的一段汇编代码拷贝到目标进程的一个安全的代码段,通过参数寄存器reg4和参数寄存器reg5)将需要malloc的长度和malloc函数地址传递进去,最后设置cp0_epc,将执行地址设置为刚刚拷贝过去的代码的起始地址;
[0042] 3)加载程序再通过ptrace的PTRACE_CONT将目标进程恢复执行,如果执行成功,通过读返回值寄存器reg2,获取malloc的返回值,将补丁文件的路径存入;
[0043] 4)执行dlopen函数。将malloc获取到的地址和dlopen函数的地址作为参数传入,执行dlopen成功后,会触发补丁文件中的__attribute__((constructor))函数执行;
[0044] 5)补丁文件中的init函数查找到需要修复的函数地址,在该地址的入口处,使用jalr实现函数跳转,跳转到新函数的入口。
[0045] 结合作为本实施例一种可能的实现方式,执行dlopen成功后,加载程序通过还原一些被替换过的代码段,还原最开始保存的寄存器使目标进程继续执行。
[0046] 结合作为本实施例一种可能的实现方式,卸载补丁文件时,执行对应的dlclose将对应的库进行卸载,并触发__attribute__((destructor))函数将之前替换过的代码进行恢复。
[0047] 结合作为本实施例一种可能的实现方式,所述热补丁方法还包括以下步骤:
[0048] 补丁文件校验。
[0049] 结合作为本实施例一种可能的实现方式,所述补丁文件校验的具体过程为:运行在设备上的加载程序,通过分析补丁文件的设备型号信息、软件系统信息和补丁文件校验信息来识别补丁文件是否是匹配的,否则会导致系统异常。
[0050] 针对使用龙芯Linux操作系统的交换机等网络产品,本发明实现了针对应用的热补丁技术,解决了在不重启设备、不中断业务的情况下对产品缺陷进行修补或者新增功能的问题,不仅可以随时对龙芯平台进行打补丁、修复缺陷,而且该技术针对龙芯平台成熟稳定,适应性广,且实现简单,安全可靠。
[0051] 图2是根据一示例性实施例示出的一种针对龙芯平台的热补丁装置的示意图。如图2所示,本实施例提供的一种针对龙芯平台的热补丁装置,包括:
[0052] 制作模块,用于制作补丁文件;
[0053] 加载模块,用于加载补丁文件。
[0054] 结合作为本实施例一种可能的实现方式,所述热补丁装置还包括:
[0055] 校验模块,用于校验补丁文件。
[0056] 结合作为本实施例一种可能的实现方式,所述补丁文件包括需要加载的so文件、补丁文件对应的设备型号、补丁文件对应的软件系统版本信息和补丁文件校验信息。
[0057] 基于龙芯平台的linux应用的热补丁的实现过程,包括补丁文件的制作、加载、校验和生效等,对龙芯平台运行中的应用程序实现不中断、不重启的热补丁修复。具体实现过程如下:
[0058] 1)Linux有一个加载动态库的函数dlopen,能够在运行过程中动态加载so库。
[0059] 2)GCC编译器有一个扩展:__attribute__((constructor))可以指定某个函数在so库加载的时候执行,对应的__attribute__((destructor))可以指定某个函数在so库卸载的时候自动执行。
[0060] 3)运行在设备上的加载程序,通过ptrace将需要打补丁的进程attach,然后查找符号表,或者通过固定程序的偏移,找到dlopen,dlclose,malloc,free的函数的地址。
[0061] 4)加载程序先将实现malloc调用的一段汇编代码拷贝到目标进程的一个安全的代码段,通过参数寄存器(reg4,reg5)将需要malloc的长度和malloc函数地址传递进去,最后设置cp0_epc将执行地址设置为刚刚拷贝过去的代码的起始地址。加载程序再通过ptrace的PTRACE_CONT将目标进程恢复执行。
[0062] 5)如果执行成功,通过读返回值寄存器(reg2),获取malloc的返回值,将补丁文件的路径存入。
[0063] 6)同malloc执行流程,加载程序执行dlopen函数。将malloc获取到的地址和dlopen函数的地址作为参数传入,执行dlopen成功后,会触发补丁文件中的__attribute__((constructor))函数执行。
[0064] 7)补丁文件中的init函数查找到需要修复的函数地址,在该地址的入口处,使用jalr实现函数跳转,跳转到新函数的入口。
[0065] 8)补丁通过dlopen执行后,就实际生效了。然后然后加载程序通过还原一些被替换过的代码段,还原最开始保存的寄存器使目标进程继续执行。
[0066] 9)如果需要卸载,执行对应的dlclose就可以将对应的库进行卸载。触发__attribute__((destructor))函数将之前替换过的代码进行恢复。
[0067] 运行在设备上的加载程序,通过分析补丁文件的设备型号信息,软件系统信息,文件校验信息来识别补丁文件是否是匹配的,否则会导致系统异常。
[0068] 以上所述只是本发明的优选实施方式,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也被视作为本发明的保护范围。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈