一种函数级热补丁方法、装置、智能终端及存储介质与流程

文档序号:21778037发布日期:2020-08-07 19:47阅读:228来源:国知局
一种函数级热补丁方法、装置、智能终端及存储介质与流程

本发明涉及嵌入式系统bsp技术领域,尤其涉及的是一种函数级热补丁方法、装置、智能终端及存储介质。



背景技术:

编写软件代码的时候,由于各种原因总会存在软件bug,研发人员也会对bug(漏洞)进行修复,发布版本并且给设备升级,这样才能彻底解决bug。但是有些bug已经定位,重新发布版本并且给所有设备完成一次升级的代价非常大,毕竟升级版本需要重新启动设备。

常见的windows系统经常发布补丁,有些补丁是需要重启系统的,那就是冷补丁。不需要重启系统就能生效的补丁,是热补丁。

热补丁的方法一般是将出现bug所在的函数第一条指令设置为跳转指令,跳转到补丁所在的地方,原函数的功能交由补丁函数完成,实际是剔除了原bug函数的功能,由补丁函数接管bug函数功能(如图1)。但是这样的补丁有一个很不方便的地方,目前大部分系统都对代码段的指令进行了写保护,修改指令必然要对代码段进行写操作。这样会触发写异常。在获取到代码段写权限后,必然对该代码所在的整个页(一般是4kb)的指令解除写保护,为了写一条指令而对整个页的指令解除写保护,这样也是很危险的。另外,修改的跳转指令也要计算好跳转的地址,一旦跳转到异常指令的地址,系统则出现更严重的异常。

因此,现有技术还有待改进和发展。



技术实现要素:

本发明要解决的技术问题在于,针对现有技术的上述缺陷,提供一种函数级热补丁方法、装置、智能终端及存储介质。

本发明解决问题所采用的技术方案如下:

第一方面,本发明实施例提供一种函数级热补丁方法,其中,所述方法包括:

当需要对bug函数的打补丁时,加载预设的补丁文件;

当cpu执行指令到所述bug函数时,触发预设的mon功能,并执行所述补丁文件;

当所述补丁文件执行完毕后,返回所述bug函数的指令或上层函数。

在一种实施方式中,所述当需要对bug函数的打补丁时,加载预设的补丁文件之前包括:

预先将补丁函数编译好,并制作成所述补丁文件。

在一种实施方式中,所述预先将补丁函数编译好,并制作成所述补丁文件,包括:

在编译环境中制作好所述补丁函数;

预先在系统内设置一空丁函数,所述空丁函数中设置有指令空间;

将所述补丁函数填充至所述空丁函数的所述指令空间中,以制作成所述补丁文件。

在一种实施方式中,所述预先将补丁函数编译好,并制作成所述补丁文件,还包括:

通过网络协议将所述补丁文件加载至设备上,并将所述补丁文件填充值所述bug函数的位置。

在一种实施方式中,所述当cpu执行指令到所述bug函数时,触发预设的mon功能,并执行所述补丁文件之前,包括:

将所述bug函数中需要打补丁的指令地址设置为监控地址,并挂载所述mon系统监控器对系统进行监控。

在一种实施方式中,所述当cpu执行指令到所述bug函数时,触发预设的mon功能,并执行所述补丁文件,包括:

当监控至所述cpu执行指令至所述bug函数后,触发所述mon系统监控器,控制所述mon系统监控器中断,并执行所述补丁文件。

第二方面,本发明实施例还公开一种函数级热补丁装置,其中,所述装置包括:

加载单元,用于当需要对bug函数的打补丁时,加载预设的补丁文件;

执行单元,用于当cpu执行指令到所述bug函数时,触发预设的mon功能,并执行所述补丁文件;

返回单元,用于当所述补丁文件执行完毕后,返回所述bug函数的指令或上层函数。

第三方面,本发明实施还提供一种智能终端,包括有存储器,以及一个或者一个以上的程序,其中一个或者一个以上程序存储于存储器中,且经配置以由一个或者一个以上处理器执行所述一个或者一个以上程序包含用于执行如上述任意一项所述的函数级热补丁方法。

第四方面,本发明实施例还提供一种非临时性计算机可读存储介质,当所述存储介质中的指令由电子设备的处理器执行时,使得电子设备能够执行如上述中任意一项所述的函数级热补丁方法。

本发明的有益效果:本发明可以针对性地bug所在的函数的需要打补丁的地方打补丁,并不会无需对整个系统升级,也不需要对整个系统的代码指令进行修改,避免出现异常情况。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是现有技术中的补丁函数执行流程图。

图2是本发明实施例提供的函数级热补丁方法的流程示意图。

图3是本发明实施例中的补丁函数的执行流程图。

图4是本发明实施例中的函数级热补丁装置的原理框图。

图5是本发明实施例提供的智能终端的内部结构原理框图。

具体实施方式

为使本发明的目的、技术方案及优点更加清楚、明确,以下参照附图并举实施例对本发明进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

需要说明,若本发明实施例中有涉及方向性指示(诸如上、下、左、右、前、后……),则该方向性指示仅用于解释在某一特定姿态(如附图所示)下各部件之间的相对位置关系、运动情况等,如果该特定姿态发生改变时,则该方向性指示也相应地随之改变。

为了解决现有技术的问题,本实施例提供一种函数级热补丁方法,具体如图2中所示,所述方法包括:

步骤s100、当需要对bug函数的打补丁时,加载预设的补丁文件;

步骤s200、当cpu执行指令到所述bug函数时,触发预设的mon功能,并执行所述补丁文件;

步骤s300、当所述补丁文件执行完毕后,返回所述bug函数的指令或上层函数。

具体实施时,本实施例中预先将预先将补丁函数编译好,并制作成所述补丁文件。具体地,本实施例首先在编译环境中制作好所述补丁函数,然后预先在系统内设置一空丁函数,所述空丁函数中设置有指令空间;将所述补丁函数填充至所述空丁函数的所述指令空间中,以制作成所述补丁文件。在本实施例中,所述空丁函数中里的所有指令空间都是空指令空间。存放空指令是为了让该空丁函数预先就占用一段指令空间。一旦有用的补丁函数被加载到系统中,就会将补丁函数中的实际指令填充该段空指令空间。预设空丁函数的大小设置为4kb,为一个页面的大小,并且解除其写保护。一般补丁文件都是对一小段代码进行修改,所以补丁不会太大,4kb的空间足够。

当补丁文件制作好之后,将通过网络协议将所述补丁文件加载至设备上,并将所述补丁文件填充值所述bug函数的位置。也就是说,参照图3,本实施例在正式程序中,已经预先将补丁函数编译好,并且在正常的程序空间(即空丁函数中的指令空间)中,其所占空间为4kb,可以存放1k条令指。在补丁函数未加载时,其1k条指令全部为空指令。当补丁函数加载后,所述补丁函数填充所述空丁函数的空指令空间。当要对某出现bug的函数打补丁时(该bug函数假设名称为fbug()),通过网络协议将补丁文件加载到设备上,最后填充到该bug函数的位置(即需要打上补丁的位置)。

进一步地,本实施例中预先将所述bug函数中需要打补丁的指令地址设置为监控地址,并挂载所述mon系统监控器对系统进行监控,当监控至所述cpu执行指令至所述bug函数后,触发所述mon系统监控器,控制所述mon系统监控器中断,并执行所述补丁文件。也就是说,一旦cpu执行指令到fbug()函数中被监控的指令,cpu立刻触发中断,并且进入exemon()函数中。exemon()调研该补丁文件中的补丁函数fpatch()进行执行。这样就可以针对性对bug函数需要打补丁的位置打上补丁,而无需要对整个系统函数的指令进行修改,因此就可以避免因对全部的指令进行修改所导致异常情况发生的问题。

进一步地,当所述补丁文件执行完毕后,返回所述bug函数的指令或上层函数。如图3中所示,由于补丁文件中的补丁函数fpatch()是预先在编译环境上编译好的,其指令也是定好的。当补丁文件中的补丁函数fpatch()执行完毕后,对程序计数器(pc)重新赋值,决定其返回到fbug()中,还是其上层函数。

基于上述实施例,本发明还提供一种函数级热补丁装置,具体如图4中所示,所述函数级热补丁装置包括:加载单元410、执行单元420以及返回单元430。具体地,所述加载单元410,用于当需要对bug函数的打补丁时,加载预设的补丁文件。所述执行单元420,用于当cpu执行指令到所述bug函数时,触发预设的mon功能,并执行所述补丁文件。所述返回单元430,用于当所述补丁文件执行完毕后,返回所述bug函数的指令或上层函数。

基于上述实施例,本发明还提供了一种智能终端,其原理框图可以如图5所示。该智能终端包括通过系统总线连接的处理器、存储器、网络接口、显示屏、温度传感器。其中,该智能终端的处理器用于提供计算和控制能力。该智能终端的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统和计算机程序。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该智能终端的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种智能终端角度调节方法。该智能终端的显示屏可以是液晶显示屏或者电子墨水显示屏,该智能终端的温度传感器是预先在智能终端内部设置,用于检测内部设备的运行温度。

本领域技术人员可以理解,图5中示出的原理框图,仅仅是与本发明方案相关的部分结构的框图,并不构成对本发明方案所应用于其上的智能终端的限定,具体的智能终端可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。

在一个实施例中,提供了一种智能终端,包括有存储器,以及一个或者一个以上的程序,其中一个或者一个以上程序存储于存储器中,且经配置以由一个或者一个以上处理器执行所述一个或者一个以上程序包含用于进行以下操作的指令:

当需要对bug函数的打补丁时,加载预设的补丁文件;

当cpu执行指令到所述bug函数时,触发预设的mon功能,并执行所述补丁文件;

当所述补丁文件执行完毕后,返回所述bug函数的指令或上层函数。

本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本发明所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(rom)、可编程rom(prom)、电可编程rom(eprom)、电可擦除可编程rom(eeprom)或闪存。易失性存储器可包括随机存取存储器(ram)或者外部高速缓冲存储器。作为说明而非局限,ram以多种形式可得,诸如静态ram(sram)、动态ram(dram)、同步dram(sdram)、双数据率sdram(ddrsdram)、增强型sdram(esdram)、同步链路(synchlink)dram(sldram)、存储器总线(rambus)直接ram(rdram)、直接存储器总线动态ram(drdram)、以及存储器总线动态ram(rdram)等。

综上所述,本发明公开了一种函数级的热补丁方法、装置、智能终端及存储介质所述方法包括:当需要对bug函数的打补丁时,加载预设的补丁文件;当cpu执行指令到所述bug函数时,触发预设的mon功能,并执行所述补丁文件;当所述补丁文件执行完毕后,返回所述bug函数的指令或上层函数。本发明可以针对性地bug所在的函数的需要打补丁的地方打补丁,并不会无需对整个系统升级,也不需要对整个系统的代码指令进行修改,避免出现异常情况。

应当理解的是,本发明的应用不限于上述的举例,对本领域普通技术人员来说,可以根据上述说明加以改进或变换,所有这些改进和变换都应属于本发明所附权利要求的保护范围。

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