首页 / 专利库 / 电脑零配件 / 固件 / 软件 / 软件包 / 软件组件 / 软件代码 / 一种嵌入式系统软件注入热补丁的方法及系统

一种嵌入式系统软件注入热补丁的方法及系统

阅读:1019发布:2020-12-08

专利汇可以提供一种嵌入式系统软件注入热补丁的方法及系统专利检索,专利查询,专利分析的服务。并且本 发明 公开了一种 嵌入式系统 软件 注入热 补丁 的方法及系统,涉及嵌入式 系统软件 补丁技术领域。该方法包括:在软件程序中预留若干二级跳转表预留区,在补丁文件中预留若干三级跳转表预留区;为每一个原函数分配最近的二级跳转指令存储空间,为每个补丁函数分配最近的三级跳转指令存储空间;生成每个原函数的二级跳转指令序列,并存储于对应的二级跳转指令存储空间内,生成每个补丁函数的三级跳转指令序列,并存储于对应的三级跳转指令序列空间内;最后,将每个原函数的首条指令 修改 为一级跳转指令。本发明不影响系统程序的运行,也无需修改编译器;且内存空间浪费少,补丁启用时间短。,下面是一种嵌入式系统软件注入热补丁的方法及系统专利的具体信息内容。

1.一种嵌入式系统软件注入热补丁的方法,其特征在于,包括以下步骤:
S1、在软件的程序编译阶段,在软件程序的各模代码段中预留出若干二级跳转表预留区;在软件的补丁文件编译阶段,在补丁文件的各模块代码段中预留出若干三级跳转表预留区,转入步骤S2;
S2、将离每个原函数最近的二级跳转表预留区,作为该原函数的二级跳转指令存储空间;将离每个补丁函数最近的三级跳转表预留区,作为该补丁函数的三级跳转指令存储空间;
生成每个原函数的二级跳转指令序列,并存储于对应的二级跳转指令存储空间内;生成每个补丁函数的三级跳转指令序列,并存储于对应的三级跳转指令序列空间内,转入步骤S3;
S3、将每个原函数的首条指令修改为一级跳转指令;当系统运行每个原函数时,根据该原函数的一级跳转指令,由原函数跳转至对应二级跳转指令序列的首地址;根据该二级跳转指令序列,由该二级跳转指令序列跳转至对应三级跳转指令序列的首地址;根据该三级跳转指令序列,最终由三级跳转指令序列到函数补丁的跳转。
2.如权利要求1所述的嵌入式系统软件注入热补丁的方法,其特征在于,步骤S2包括以下步骤:
S201、查找并记录补丁文件中的补丁函数后,将补丁文件加载至系统中,转入步骤S202;
S202、记录所有补丁函数的地址;根据补丁函数名查找对应原函数的地址,转入步骤S203;
S203、在软件程序中查找二级跳转表预留区,记录二级跳转表预留区信息,转入步骤S204;
S204、在补丁文件中查找三级跳转表预留区,记录三级跳转表预留区信息,转入步骤S205;
S205、根据原函数的地址、二级跳转表预留区信息,将离每个原函数最近的二级跳转表预留区作为该原函数的二级跳转指令存储空间;根据补丁函数的地址、三级跳转表预留区信息,将离每个补丁函数最近的三级跳转表预留区作为该补丁函数的三级跳转指令存储空间,转入步骤S206;
S206、根据每个原函数的二级跳转指令存储空间的地址、以及对应的补丁函数的三级跳转指令存储空间的地址,生成每个原函数的二级跳转指令序列,并存储于对应的二级跳转指令存储空间内;根据补丁函数地址、以及该补丁函数的三级跳转指令存储空间的地址,生成每个补丁函数的三级跳转指令序列,并存储于对应的三级跳转指令序列空间内。
3.如权利要求2所述的嵌入式系统软件注入热补丁的方法,其特征在于:步骤S1中所述预留出若干二级跳转表预留区的同时,需为二级跳转表预留区定义一个标示符;所述预留出若干三级跳转表预留区的同时,需为三级跳转表预留区定义一个标示符;
步骤S201中所述将记录有补丁函数的补丁文件加载至系统中时,系统将自动为补丁文件的各模块生成对应的补丁文件模块名;
步骤S203具体包括以下步骤:获取并分析软件程序符号表中的一个符号信息;
若符号名为二级跳转表预留区标示符、且符号所在模块的模块名不是补丁文件模块名,则确定查找到二级跳转表预留区,记录该二级跳转表预留区地址、模块名;判断软件程序符号表是否全部查找完毕,若是,转到步骤S204,若否,重新执行步骤S203;
若符号名不为二级跳转表预留区标示符、或者符号所在模块的模块名是补丁文件模块名,则判断软件程序符号表是否全部查找完毕,若是,转到步骤S204,若否,重新执行步骤S203。
4.如权利要求3所述的嵌入式系统软件注入热补丁的方法,其特征在于,步骤S204具体包括以下步骤:获取并分析补丁文件符号表中的一个符号信息;
若符号名为三级跳转表预留区标示符、且符号所在模块的模块名是补丁文件模块名,则确定查找到三级跳转表预留区,记录该三级跳转表预留区地址、模块名;判断补丁文件符号表是否全部查找完毕,若是,转到步骤S205,若否,重新执行步骤S204;
若符号名不为三级跳转表预留区标示符、或者符号所在模块的模块名不是补丁文件模块名,则判断补丁文件符号表是否全部查找完毕,若是,转到步骤S205,若否,重新执行步骤S204。
5.如权利要求2所述的嵌入式系统软件注入热补丁的方法,其特征在于:步骤S201中所述补丁函数为符合补丁函数命名规则的函数,所述补丁函数命名规则为:补丁函数名=原函数名+补丁标示+用户自定义项。
6.如权利要求1所述的嵌入式系统软件注入热补丁的方法,其特征在于:步骤S2中所述二级跳转指令序列包括:将返回地址寄存器的值压入堆栈的指令、将跳转指令需要使用的寄存器压入堆栈的指令、将三级跳转指令序列的首地址赋值给寄存器的指令、跳转到三级跳转指令序列首地址的指令;所述三级跳转指令序列包括:还原二级跳转指令序列所使用的寄存器的值的指令、还原返回地址寄存器的值的指令、跳转至补丁函数首条地址的指令。
7.如权利要求1所述的嵌入式系统软件注入热补丁的方法,其特征在于:步骤S1中,通过修改软件程序的链接脚本,在软件程序的各模块代码段中预留出若干二级跳转表预留区;通过修改补丁文件的链接脚本,在补丁文件的各模块代码段中预留出若干三级跳转表预留区。
8.如权利要求1至7中任一项所述的嵌入式系统软件注入热补丁的方法,其特征在于:
步骤S3之后还包括热补丁去激活的步骤:将原函数的首条指令还原为未修改成一级跳转指令之前的原指令。
9.一种嵌入式系统软件注入热补丁的系统,其特征在于,包括跳转表预留区管理模块、热补丁安装模块和热补丁激活模块,其中:
所述跳转表预留区管理模块用于:在软件的程序编译阶段,在软件程序的各模块代码段中预留出若干二级跳转表预留区;在软件的补丁文件编译阶段,在补丁文件的各模块代码段中预留出若干三级跳转表预留区;向热补丁安装模块发送热补丁安装信号
所述热补丁安装模块用于:收到热补丁安装信号后,将离每个原函数最近的二级跳转表预留区,作为该原函数的二级跳转指令存储空间;将离每个补丁函数最近的三级跳转表预留区,作为该补丁函数的三级跳转指令存储空间;
生成每个原函数的二级跳转指令序列,并存储于对应的二级跳转指令存储空间内;生成每个补丁函数的三级跳转指令序列,并存储于对应的三级跳转指令序列空间内;向热补丁激活模块发送热补丁激活信号;
所述热补丁激活模块用于:收到热补丁激活信号后,将每个原函数的首条指令修改为一级跳转指令;当系统运行每个原函数时,先根据该原函数的一级跳转指令,实现原函数到对应二级跳转指令序列的跳转;再根据该二级跳转指令序列,实现二级跳转指令序列到对应三级跳转指令序列的跳转;最后,根据该三级跳转指令序列,实现三级跳转指令序列到函数补丁的跳转。
10.如权利要求9所述的嵌入式系统软件注入热补丁的系统,其特征在于:该系统还包括热补丁去激活模块,所述热补丁去激活模块用于:将原函数的首条指令还原为未修改成一级跳转指令之前的原指令。

说明书全文

一种嵌入式系统软件注入热补丁的方法及系统

技术领域

[0001] 本发明涉及嵌入式系统软件补丁技术领域,具体来讲是一种嵌入式系统软件注入热补丁的方法及系统。

背景技术

[0002] 嵌入式系统应用非常广泛,家用DVD、机顶盒、通信设备中的交换机、路由器等都使用了嵌入式系统。嵌入式系统软件在嵌入式系统中具有举足轻重的作用,用户对嵌入式系统软件的连续运行时间和稳定性要求很高。如果嵌入式系统软件存在一般性的软件错误,采用热补丁技术进行在线修改软件的错误,能提高软件的连续运行时间和稳定性。
[0003] 目前嵌入式系统软件注入热补丁的实现方式主要有以下两种:
[0004] (1)在编译程序的时候,在每一个函数首条指令的前面(指令地址递减方向)预留一定的空白区域,用以安排该函数的跳转指令序列,跳转到该函数的补丁函数。利用此种方法可以实现在线修复软件的错误,但是这种方式需要修改编译器,提供热补丁支持,同时每一个函数都预留一定的空白区域,有点浪费内存空间。
[0005] (2)直接在函数的头部区域插入该函数的跳转指令序列,跳转到该函数的补丁函数。利用此种方法同样可以实现在线修复软件的错误,但是这种方式需要停止除本线程之外的其他所有线程的运行,待插入该函数的跳转指令序列完成之后再恢复停止运行的线程,因此采用该种方法会影响程序的运行,补丁的启用过程时间较长。

发明内容

[0006] 本发明的目的是为了克服上述背景技术的不足,提供一种嵌入式系统软件注入热补丁的方法及系统,不影响系统程序的运行,也无需修改编译器;且内存空间浪费少,补丁启用时间短。
[0007] 为达到以上目的,本发明提供一种嵌入式系统软件注入热补丁的方法,包括以下步骤:
[0008] S1、在软件的程序编译阶段,在软件程序的各模代码段中预留出若干二级跳转表预留区;在软件的补丁文件编译阶段,在补丁文件的各模块代码段中预留出若干三级跳转表预留区,转入步骤S2;
[0009] S2、将离每个原函数最近的二级跳转表预留区,作为该原函数的二级跳转指令存储空间;将离每个补丁函数最近的三级跳转表预留区,作为该补丁函数的三级跳转指令存储空间;
[0010] 生成每个原函数的二级跳转指令序列,并存储于对应的二级跳转指令存储空间内;生成每个补丁函数的三级跳转指令序列,并存储于对应的三级跳转指令序列空间内,转入步骤S3;
[0011] S3、将每个原函数的首条指令修改为一级跳转指令;当系统运行每个原函数时,根据该原函数的一级跳转指令,由原函数跳转至对应二级跳转指令序列的首地址;根据该二级跳转指令序列,由该二级跳转指令序列跳转至对应三级跳转指令序列的首地址;根据该三级跳转指令序列,最终由三级跳转指令序列到函数补丁的跳转。
[0012] 在上述技术方案的基础上,步骤S2包括以下步骤:
[0013] S201、查找并记录补丁文件中的补丁函数后,将补丁文件加载至系统中,转入步骤S202;
[0014] S202、记录所有补丁函数的地址;根据补丁函数名查找对应原函数的地址,转入步骤S203;
[0015] S203、在软件程序中查找二级跳转表预留区,记录二级跳转表预留区信息,转入步骤S204;
[0016] S204、在补丁文件中查找三级跳转表预留区,记录三级跳转表预留区信息,转入步骤S205;
[0017] S205、根据原函数的地址、二级跳转表预留区信息,将离每个原函数最近的二级跳转表预留区作为该原函数的二级跳转指令存储空间;根据补丁函数的地址、三级跳转表预留区信息,将离每个补丁函数最近的三级跳转表预留区作为该补丁函数的三级跳转指令存储空间,转入步骤S206;
[0018] S206、根据每个原函数的二级跳转指令存储空间的地址、以及对应的补丁函数的三级跳转指令存储空间的地址,生成每个原函数的二级跳转指令序列,并存储于对应的二级跳转指令存储空间内;根据补丁函数地址、以及该补丁函数的三级跳转指令存储空间的地址,生成每个补丁函数的三级跳转指令序列,并存储于对应的三级跳转指令序列空间内。
[0019] 在上述技术方案的基础上,步骤S1中所述预留出若干二级跳转表预留区的同时,需为二级跳转表预留区定义一个标示符;所述预留出若干三级跳转表预留区的同时,需为三级跳转表预留区定义一个标示符;
[0020] 步骤S201中所述将记录有补丁函数的补丁文件加载至系统中时,系统将自动为补丁文件的各模块生成对应的补丁文件模块名;
[0021] 步骤S203具体包括以下步骤:获取并分析软件程序符号表中的一个符号信息;
[0022] 若符号名为二级跳转表预留区标示符、且符号所在模块的模块名不是补丁文件模块名,则确定查找到二级跳转表预留区,记录该二级跳转表预留区地址、模块名;判断软件程序符号表是否全部查找完毕,若是,转到步骤S204,若否,重新执行步骤S203;
[0023] 若符号名不为二级跳转表预留区标示符、或者符号所在模块的模块名是补丁文件模块名,则判断软件程序符号表是否全部查找完毕,若是,转到步骤S204,若否,重新执行步骤S203。
[0024] 在上述技术方案的基础上,步骤S204具体包括以下步骤:获取并分析补丁文件符号表中的一个符号信息;
[0025] 若符号名为三级跳转表预留区标示符、且符号所在模块的模块名是补丁文件模块名,则确定查找到三级跳转表预留区,记录该三级跳转表预留区地址、模块名;判断补丁文件符号表是否全部查找完毕,若是,转到步骤S205,若否,重新执行步骤S204;
[0026] 若符号名不为三级跳转表预留区标示符、或者符号所在模块的模块名不是补丁文件模块名,则判断补丁文件符号表是否全部查找完毕,若是,转到步骤S205,若否,重新执行步骤S204。
[0027] 在上述技术方案的基础上,步骤S201中所述补丁函数为符合补丁函数命名规则的函数,所述补丁函数命名规则为:补丁函数名=原函数名+补丁标示+用户自定义项。
[0028] 在上述技术方案的基础上,步骤S2中所述二级跳转指令序列包括:将返回地址寄存器的值压入堆栈的指令、将跳转指令需要使用的寄存器压入堆栈的指令、将三级跳转指令序列的首地址赋值给寄存器的指令、跳转到三级跳转指令序列首地址的指令;所述三级跳转指令序列包括:还原二级跳转指令序列所使用的寄存器的值的指令、还原返回地址寄存器的值的指令、跳转至补丁函数首条地址的指令。
[0029] 在上述技术方案的基础上,步骤S1中,通过修改软件程序的链接脚本,在软件程序的各模块代码段中预留出若干二级跳转表预留区;通过修改补丁文件的链接脚本,在补丁文件的各模块代码段中预留出若干三级跳转表预留区。
[0030] 在上述技术方案的基础上,步骤S3之后还包括热补丁去激活的步骤:将原函数的首条指令还原为未修改成一级跳转指令之前的原指令。
[0031] 本发明还提供一种嵌入式系统软件注入热补丁的系统,包括跳转表预留区管理模块、热补丁安装模块和热补丁激活模块,其中:
[0032] 所述跳转表预留区管理模块用于:在软件的程序编译阶段,在软件程序的各模块代码段中预留出若干二级跳转表预留区;在软件的补丁文件编译阶段,在补丁文件的各模块代码段中预留出若干三级跳转表预留区;向热补丁安装模块发送热补丁安装信号
[0033] 所述热补丁安装模块用于:收到热补丁安装信号后,将离每个原函数最近的二级跳转表预留区,作为该原函数的二级跳转指令存储空间;将离每个补丁函数最近的三级跳转表预留区,作为该补丁函数的三级跳转指令存储空间;生成每个原函数的二级跳转指令序列,并存储于对应的二级跳转指令存储空间内;生成每个补丁函数的三级跳转指令序列,并存储于对应的三级跳转指令序列空间内;向热补丁激活模块发送热补丁激活信号;
[0034] 所述热补丁激活模块用于:收到热补丁激活信号后,将每个原函数的首条指令修改为一级跳转指令;当系统运行每个原函数时,先根据该原函数的一级跳转指令,实现原函数到对应二级跳转指令序列的跳转;再根据该二级跳转指令序列,实现二级跳转指令序列到对应三级跳转指令序列的跳转;最后,根据该三级跳转指令序列,实现三级跳转指令序列到函数补丁的跳转。
[0035] 在上述技术方案的基础上,该系统还包括热补丁去激活模块,所述热补丁去激活模块用于:将原函数的首条指令还原为未修改成一级跳转指令之前的原指令。
[0036] 本发明的有益效果在于:
[0037] (1)本发明中,在代码编译阶段(软件的程序编译阶段、软件的补丁文件编译阶段),通过修改链接脚本预留出了若干二级跳转表预留区和若干三级跳转表预留区,这些预留区作为二级跳转指令序列、三级跳转指令序列的存储空间,可以避免在热补丁注入过程中对编译器进行修改,使操作更简化;并且,由于不用在每一个原函数的首条指令前面(指令地址递减方向)预留一定的空白区域,大大节省了系统内存空间。
[0038] (2)本发明中,采用三级跳转的方式,实现函数到补丁函数的跳转。其中,原函数到二级跳转表的跳转为一级跳转(由原函数内的一级跳转指令实现);二级跳转表到三级跳转表的跳转为二级跳转(由存储于二级跳转指令存储空间内的二级跳转指令序列实现);三级跳转表到补丁函数的跳转为三级跳转(由存储于三级跳转指令存储空间内的三级跳转指令序列实现)。由于每个二级跳转指令存储空间均为离对应原函数最近的二级跳转表预留区,每个三级跳转指令存储空间均为离对应补丁函数最近的三级跳转表预留区,因此,使得一级跳转为一次短跳转,三级跳转也为一次短跳转,仅二级跳转为一次长跳转。这种“短跳转-长跳转-短跳转”的三级跳转方式,使得原函数到补丁函数的跳转过程既弥补了一次短跳转无法跳转到距离较远的补丁函数地址的弊端,也避免了仅一次长跳转方式需要改变多条跳转指令而导致程序不稳定的现象,同时最后的短跳转过程能够将被修改的寄存器值还原,整个过程提高了系统的稳定性和热补丁激活效率。
[0039] (3)本发明中,在安装热补丁的时候,就已经分配好每一个函数的二级跳转指令存储空间、补丁函数的三级跳转指令存储空间,并生成了对应的二级跳转指令序列、三级跳转指令序列,因此在激活热补丁的时候,只需要将原函数的首条指令修改为一级跳转指令(短跳转指令),即可实现热补丁的快速激活,使得补丁启用时间短,且不需要停止除本线程之外的其他所有线程的运行,不影响系统程序的运行,提高了系统的稳定性。
[0040] (4)本发明的适用性广,适用于大多数支持符号表和动态加载的嵌入式系统。附图说明
[0041] 图1是本发明实施例中嵌入式系统软件注入热补丁的方法的流程图
[0042] 图2是本发明实施例中跳转表预留区的分布示意图;
[0043] 图3是本发明实施例中热补丁安装的流程图;
[0044] 图4是本发明实施例中三级跳转过程的示意图。

具体实施方式

[0045] 下面结合附图及具体实施例对本发明作进一步的详细描述。
[0046] 参见图1所示,本发明实施例提供一种嵌入式系统软件注入热补丁的方法,包括以下步骤:
[0047] S1、跳转表预留:在软件程序编译阶段,通过修改软件程序的链接脚本,在软件程序的各模块代码段中预留出若干二级跳转表预留区(如图2所示),并为二级跳转表预留区定义一个标示符,用于标示软件程序中的二级跳转表预留区;在补丁文件编译阶段,通过修改补丁文件的链接脚本,在补丁文件的各模块代码段中预留出若干三级跳转表预留区,并同样为三级跳转表预留区定义一个标示符,用于标示补丁文件中的三级跳转表预留区。
[0048] S2、热补丁安装:将离每个原函数最近的二级跳转表预留区,作为该原函数的二级跳转指令存储空间;将离每个补丁函数最近的三级跳转表预留区,作为该补丁函数的三级跳转指令存储空间;生成每个原函数的二级跳转指令序列,该二级跳转指令序列用于实现跳转至三级跳转指令序列,并存储于对应的二级跳转指令存储空间内;生成每个补丁函数的三级跳转指令序列,该三级跳转指令序列用于实现跳转至补丁函数,并存储于对应的三级跳转指令序列空间内。
[0049] 其中,二级跳转指令序列包括:将返回地址寄存器的值压入堆栈的指令、将跳转指令需要使用的寄存器压入堆栈的指令、将三级跳转指令序列的首地址赋值给寄存器的指令、跳转到三级跳转指令序列首地址的指令。三级跳转指令序列包括:还原二级跳转指令序列所使用的寄存器的值的指令、还原返回地址寄存器的值的指令、跳转至补丁函数首条地址的指令。
[0050] 如图3所示,实际操作时,步骤S2可按照以下操作进行:
[0051] S201、根据补丁文件的符号表,查找并记录补丁文件中的补丁函数后,将补丁文件加载至系统中,转入步骤S202;
[0052] 其中,将补丁文件加载至系统中时,系统将自动为补丁文件的各模块生成对应的补丁文件模块名;查找并记录的补丁函数为符合补丁函数命名规则的函数,该补丁函数命名规则为:补丁函数名=原函数名+补丁标示+用户自定义项。
[0053] S202、记录所有补丁函数的地址;根据补丁函数名找到对应的原函数并记录该原函数地址,转入步骤S203。
[0054] S203、在软件程序中查找二级跳转表预留区,记录二级跳转表预留区信息,转入步骤S204;
[0055] 具体来说,步骤S203包括以下步骤:获取并分析软件程序符号表中的一个符号信息;
[0056] 若符号名为二级跳转表预留区标示符、且符号所在模块的模块名不是补丁文件模块名,则确定查找到二级跳转表预留区,记录该二级跳转表预留区地址、模块名;判断软件程序符号表是否全部查找完毕,若是,转到步骤S204,若否,重新执行步骤S203;
[0057] 若符号名不为二级跳转表预留区标示符、或者符号所在模块的模块名是补丁文件模块名,则判断软件程序符号表是否全部查找完毕,若是,转到步骤S204,若否,重新执行步骤S203。
[0058] S204、在补丁文件中查找三级跳转表预留区,记录三级跳转表预留区信息,转入步骤S205;
[0059] 具体来说,步骤S204具体包括以下步骤:获取并分析补丁文件符号表中的一个符号信息;
[0060] 若符号名为三级跳转表预留区标示符、且符号所在模块的模块名是补丁文件模块名,则确定查找到三级跳转表预留区,记录该三级跳转表预留区地址、模块名;判断补丁文件符号表是否全部查找完毕,若是,转到步骤S205,若否,重新执行步骤S204;
[0061] 若符号名不为三级跳转表预留区标示符、或者符号所在模块的模块名不是补丁文件模块名,则判断补丁文件符号表是否全部查找完毕,若是,转到步骤S205,若否,重新执行步骤S204。
[0062] S205、根据原函数的地址、二级跳转表预留区信息,将离每个原函数最近的二级跳转表预留区作为该原函数的二级跳转指令存储空间;根据补丁函数的地址、三级跳转表预留区信息,将离每个补丁函数最近的三级跳转表预留区作为该补丁函数的三级跳转指令存储空间,转入步骤S206。
[0063] S206、根据每个原函数的二级跳转指令存储空间的地址、以及对应的补丁函数的三级跳转指令存储空间的地址,生成每个原函数的二级跳转指令序列,并存储于对应的二级跳转指令存储空间内;根据补丁函数地址、以及该补丁函数的三级跳转指令存储空间的地址,生成每个补丁函数的三级跳转指令序列,并存储于对应的三级跳转指令序列空间内。
[0064] S3、热补丁激活:将每个原函数的首条指令修改为一级跳转指令;当系统运行每个原函数时(如图4所示),根据每个原函数的一级跳转指令,由原函数跳转至对应二级跳转指令序列的首地址(短跳转);根据该二级跳转指令序列,由该二级跳转指令序列跳转至对应三级跳转指令序列的首地址(长跳转);根据该三级跳转指令序列,最终由三级跳转指令序列到函数补丁的跳转(短跳转)。
[0065] 上述步骤完成后,可根据用户的需要,在热补丁激活之后进行热补丁去激活操作,即将原函数的首条指令还原为未修改成一级跳转指令之前的原指令(原指令可在热补丁安装过程中,进行备份),从而实现原系统的恢复。
[0066] 本发明实施例还提供一种嵌入式系统软件注入热补丁的系统,包括跳转表预留区管理模块、热补丁安装模块、热补丁激活模块和热补丁去激活模块,其中:
[0067] 跳转表预留区管理模块用于:在软件的程序编译阶段,在软件程序的各模块代码段中预留出若干二级跳转表预留区;在软件的补丁文件编译阶段,在补丁文件的各模块代码段中预留出若干三级跳转表预留区;向热补丁安装模块发送热补丁安装信号;
[0068] 热补丁安装模块用于:收到热补丁安装信号后,将离每个原函数最近的二级跳转表预留区,作为该原函数的二级跳转指令存储空间;将离每个补丁函数最近的三级跳转表预留区,作为该补丁函数的三级跳转指令存储空间;生成每个原函数的二级跳转指令序列,并存储于对应的二级跳转指令存储空间内;生成每个补丁函数的三级跳转指令序列,并存储于对应的三级跳转指令序列空间内;向热补丁激活模块发送热补丁激活信号;
[0069] 热补丁激活模块用于:收到热补丁激活信号后,将每个原函数的首条指令修改为一级跳转指令;当系统运行每个原函数时,先根据该原函数的一级跳转指令,实现原函数到对应二级跳转指令序列的跳转;再根据该二级跳转指令序列,实现二级跳转指令序列到对应三级跳转指令序列的跳转;最后,根据该三级跳转指令序列,实现三级跳转指令序列到函数补丁的跳转;
[0070] 热补丁去激活模块用于:将原函数的首条指令还原为未修改成一级跳转指令之前的原指令。
[0071] 本发明不局限于上述实施方式,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也视为本发明的保护范围之内。本说明书中未作详细描述的内容属于本领域专业技术人员公知的现有技术
高效检索全球专利

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

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

申请试用

分析报告

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

申请试用

QQ群二维码
意见反馈