一种获得补丁包的方法及通信装置与流程

文档序号:37778671发布日期:2024-04-30 16:49阅读:11来源:国知局
一种获得补丁包的方法及通信装置与流程

本技术涉及通信,尤其涉及一种获得补丁包的方法及通信装置。


背景技术:

1、补丁技术是解决系统软件和/或应用漏洞的有效途径。按照补丁生效过程是否影响业务运行,可将补丁技术划分为冷补丁技术与热补丁技术。其中,需要重启系统才能使补丁生效的补丁技术可称为冷补丁技术,冷补丁技术以文件替换或覆盖等方式实现漏洞修复。以overlay技术为例,overlay技术通过文件系统将存在问题的组件或模块进行上下层遮盖,例如将携带补丁的文件覆盖在存在问题的组件或模块上,并重启系统使补丁生效;能在系统运行过程中使补丁生效热补丁技术通过更改缺陷函数的执行流程的方式,实现漏洞修复,例如,当执行到缺陷函数时,依赖缺陷函数的头部跳转指令,或ftrace特性与补丁引擎框架跳转到补丁区域执行用于修复该缺陷函数的补丁函数,以kpatch为例,kpatch通过开启gcc编译器的“节分离”的编译项“-ffunction-sections”和“-fdata-sections”,将函数和数据在编译为可重定向文件时以节(section)的形式分离,然后触发gcc编译器对原始工程和携带补丁的文件的工程进行编译,将编译得到的两个编译文件进行比对,将携带补丁的文件的工程对应的编译文件中与原始工程对应的编译文件存在差异的部分提取到新的可重定向文件,并填写重定向表,完成编译链接,得到补丁包。

2、然而,对于静态编译的宏内核的产品,例如,以微控制单元(microcontrollerunit,mcu)芯片为主的产品,由于其系统镜像大多数为静态编译的宏内核,不区分内核态和用户态,各组件或模块之间存在强耦合关系,若更改其中一个组件或模块会引起整体镜像差异,造成死机等问题,因此上述冷补丁技术不适用于以mcu芯片为主的产品的漏洞修复。

3、且现有主流的热补丁技术包括ksplice、kgraft、kpatch等,其在生成补丁包的过程中大量依赖x86平台的工具和特定的编译器能力等,导致技术复用困难。以kpatch为例,其生成补丁包的过程依赖gcc编译器中上述两个编译选项的能力,且通过gcc编译器对源文件进行编译得到补丁包的过程中,还需要通过集成在kpatch工具库中进行节比对、重组以及重定向的工具对gcc编译器编译得到的两个可重定向文件进行差异提取,并将提取的差异部分重定向到新的可重定向文件,而该工具仅支持x86和ppc等架构,不支持mcu芯片平台的主流架构(例如arm架构)。且,不同的编译器对上述两个编译选项的支持程度不同,例如,有些编译器不支持这两个编译选项,有些编译器只支持上述两个编译选项的部分功能,且在以mcu芯片平台为主的产品中难以找到支持上述两个编译选项的能力,因此目前的热补丁技术也不适用于以mcu芯片为主的产品的漏洞修复。


技术实现思路

1、本技术实施例提供了一种获得补丁包的方法及通信装置,用于减小生成补丁包的过程对平台和特定编译器能力的依赖,提升补丁包的通用性。

2、第一方面,提供一种获得补丁包的方法,通过该方法获得的补丁包可以应用于以mcu芯片为主的产品,例如穿戴设备和智能家居设备等。该方法可以通过补丁服务器、个人电脑等可以制作补丁包的设备实现,该方法包括:根据第一源文件和第二源文件的差异,确定第一差异对象,其中,所述第一源文件用于修复所述第二源文件的漏洞,所述第二源文件为第一工程中与所述第一源文件相关联的源文件,所述第一工程包括一个或多个源文件;根据第二差异对象的代码段和头文件得到补丁源文件,所述第二差异对象为所述第一差异对象包括的属于所述第一源文件的对象;基于所述第一工程对所述补丁源文件进行编译,得到补丁包。

3、本技术实施例进行差异比对的过程发生在源文件(该源文件例如是进行编译预处理之前的源文件,或者是进行编译预处理得到的文件)阶段,该比对的过程可以在任意平台、任意编译器环境下执行,相对于现有技术中对两个源文件进行编译得到两个可重定向文件之后,通过集成在kpatch库中的节比对工具进行差异提取的方式,减小了对平台工具的依赖。以及,本技术实施例在获得差异对象之后,即可根据差异对象获得补丁包对应的补丁源文件,基于第一工程(下文也可以称作原始工程)对补丁源文件进行编译之后即可获得补丁包,无需对函数、变量等生成的独立节进行重组、重定向等操作,减小了对编译器节分离能力以及节重组、重定向工具的依赖,提升了补丁包的通用性。

4、在一种可能的设计中,根据第一源文件和第二源文件的差异,确定第一差异对象,包括:基于所述第二源文件的语法规则对所述第一源文件和所述第二源文件进行差异比对,确定所述第一源文件和所述第二源文件的差异内容;确定所述差异内容对应的语法结构为所述第一差异对象,所述语法结构用于定义函数、变量和/或常量。

5、其中,对源文件进行语法分析和差异比对的过程不受具体的编译环境和平台限制,因此基于第二源文件的语法规则对第一源文件和第二源文件进行差异比对可以在任意编译器环境下执行,减小了差异提取过程对平台工具的依赖。

6、在一种可能的设计中,所述方法还包括:为所述第二差异对象添加第一标识,所述第一标识用于区分所述第二差异对象和第三差异对象,所述第三差异对象为所述第一差异对象包括的属于所述第二源文件的对象。

7、其中,静态编译在编译的过程中需要对整个原始工程进行编译,即需要对原始工程中的第三差异对象进行编译,对第二差异对象添加第一标识,可以避免编译器在编译第二差异对象和第三差异对象时出现编译冲突。

8、在一种可能的设计中,所述方法还包括:在所述补丁源文件中添加编译关键字;或,在所述第二差异对象中添加所述编译关键字;其中,所述编译关键字用于强制编译。

9、由于补丁源文件中的内容不会被调用,编译器在编译的过程中如果发现某些内容没有调用则会对其进行优化,因此可以通过在补丁源文件中添加编译关键字或者对补丁源文件中的每个第二差异对象添加编译关键字,以使得编译器在编译过程中对补丁源文件中的内容进行强制编译,避免补丁源文件被优化删除。

10、在一种可能的设计中,基于所述第一工程对所述补丁源文件进行编译,得到补丁包,包括:基于所述第一工程对第二工程进行复原,所述第二工程包括至少一个源文件,所述至少一个源文件包括所述第一源文件;对复原后的所述第二工程和所述补丁源文件进行编译,得到所述补丁包。

11、其中,第二工程是携带了补丁的工程,基于第二工程中的第一源文件得到第二工程之后,通过第一工程对第二工程进行复原,得到一个与第一工程一样的工程,以保证第二工程的编译位置与原始工程的编译位置相同,避免补丁内容引起第二工程相对于原始工程出现编译时间和版本等无关差异之外的其它差异。

12、在一种可能的设计中,对所述补丁源文件进行编译,包括:获取目标编译器的重定向配置模板,所述目标编译器为用于对所述第二工程和所述补丁源文件进行编译的编译器,所述重定向配置模板用于指示所述补丁源文件的编译位置;将所述补丁源文件编译到所述重定向配置模板指示的位置。

13、其中,重定向配置模板是用户根不同的编译器配置的节的编译定向信息,用于将补丁源文件的编译位置指向补丁区,使得补丁源文件在和第二工程一同参与静态编译的情况下,避免补丁内容引起第二工程相对于原始工程出现关键差异。

14、在一种可能的设计中,对所述补丁源文件进行编译,包括:确定所述第二差异对象调用的目标对象,所述目标对象包括目标函数、目标变量和/或目标常量;如果所述目标对象属于所述第一工程,获取所述目标对象的存储地址;基于所述存储地址获取所述目标对象;基于获取的所述目标对象对所述第二差异对象进行编译。

15、其中,将补丁源文件中的第二差异对象对原始工程的调用转译为绝对地址的访问,可以实现补丁源文件对原始工程中目标对象的直接访问,以及避免补丁内容引起第二工程相对于原始工程出现关键差异。

16、在一种可能的设计中,对所述第二工程和所述补丁源文件进行编译,得到所述补丁包,包括:对所述第二工程和所述补丁源文件进行编译,得到第一镜像文件;从所述第一镜像文件中提取所述补丁包。

17、其中,对第二工程和补丁源文件进行编译得到的镜像文件进行切割即可得到能被独立加载、激活的补丁包,该补丁包不需要链接回第二工程执行,使得以mcu芯片为主的产品可以通过打补丁的方式实现漏洞修复。

18、在一种可能的设计中,在从所述第一镜像文件中提取所述补丁包之前,还包括:获取第二镜像文件的地址范围,以及获取所述第一镜像文件在所述地址范围内的数据,所述第二镜像文件为对所述第一工程进行编译得到的镜像文件;将所述第一镜像文件在所述地址范围内的数据与所述第二镜像文件进行比对;确定所述第一镜像文件在所述地址范围内的数据与所述第二镜像文件的差异仅包括编译时间和/或版本号。

19、也就是说,确定编译生成的镜像文件(第一镜像文件)与归档的镜像文件(对原始工程进行编译之后归档的镜像文件,即第二镜像文件)的差异仅来自构建时间和版本号等与原始工程内容无关的数据,可以满足静态编译的需求。

20、在一种可能的设计中,对从所述第一镜像文件中提取所述补丁包,包括:从所述第一镜像文件中提取补丁文件,所述补丁文件为编译到重定向配置模板指示的位置的文件;在所述补丁文件中添加所述第二差异对象与第三差异对象的链接信息和第一信息,得到所述补丁包,其中,所述链接信息用于关联所述第二差异对象和所述第三差异对象,所述第三差异对象为所述第一差异对象包括的属于所述第二源文件的对象,所述第一信息为所述补丁包的基本信息,所述第一信息包括版本信息,校验信息,或,备份信息中的一项或多项。

21、也就是说,通过在补丁文件中添加第二差异对象和第三差异对象的链接信息、版本信息和校验信息等可以使得终端设备加载补丁包的过程中不需要对原始工程进行修改,可以满足静态编译的需求。

22、在一种可能的设计中,所述方法还包括:基于第三差异对象包括的代码段和头文件的顺序调整所述第二差异对象包括的代码段和头文件的顺序,使得所述第二差异对象包括的代码段和头文件调整后的顺序与所述第三差异对象包括的代码段和头文件的顺序相同。

23、也就是说,在对补丁源文件中的内容进行强制编译之前,可以基于第三差异对象的顺序调整第二差异对象的顺序,提升了第二差异对象和第三差异对象链接的准确性。

24、在一种可能的设计中,所述方法还包括:在所述补丁源文件中添加第二标识,所述第二标识用于禁止通过内核对所述补丁包中的数据进行初始化。

25、其中,对数据进行初始化是通过内核完成的,内核属于原始工程的一部分,而如果通过内核对数据进行初始化可能导致原始工程出现改变,因此,通过添加第二标识禁止内核对补丁包中的数据进行初始化可以避免原始工程出现关键变化。

26、在一种可能的设计中,所述方法还包括:根据所述补丁源文件生成初始化搬移函数,所述初始化搬移函数用于对所述补丁包中的数据进行初始化。

27、添加第二标识之后,终端设备在重启过程中将不会对补丁源文件中的数据进行初始化,因此需要生成对应的初始化搬移函数实现内核对数据初始化的功能,完善了系统的初始化流程。

28、在一种可能的设计中,所述方法还包括:对所述第一源文件和所述第二源文件进行编译预处理,所述编译预处理包括如下一项或多项:删除所述第一源文件和所述第二源文件中的注释和不参与编译的内容;将所述第一源文件和所述第二源文件中对函数进行调用的内容替换为所述函数;或,将所述第一源文件和所述第二源文件中的宏替换为源语言语句。

29、也就是说,通过删除第一源文件和第二源文件中的注释和不参与编译的内容,可以降低不参与编译的内容对差异比对过程的干扰,以及通过将第一源文件和第二源文件中对函数进行调用的内容替换为函数或将宏替换为源语言语句,可以提升获取的第一差异对象的准确性。

30、第二方面,提供一种通信装置,该通信装置可以为服务器、个人电脑等可以制作补丁包的设备,或者为用于通信装置中的芯片或芯片系统。该通信装置包括通信接口以及处理器,可选的,还包括存储器。其中,该存储器用于存储计算机程序,处理器与存储器、通信接口耦合,当处理器读取所述计算机程序或指令时,使通信装置执行上述第一方面提供的方法。

31、第三方面,提供一种计算机可读存储介质,所述计算机可读存储介质用于存储计算机程序,当所述计算机程序在计算机上运行时,使得所述计算机执行如上述第一方面提供的方法。

32、第四方面,提供一种计算机程序产品,包括计算机程序,当所述计算机程序在计算机上运行时,使得所述计算机执行如上述第一方面所述的方法。

33、第五方面,提供一种芯片系统,包括处理器和接口,所述处理器用于从所述接口调用并运行指令,以使所述芯片系统实现上述第一方面所述的方法。

34、上述第二方面至第五方面的有益效果,参见第一方面的有益效果,不重复赘述。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1