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

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

Info

Publication number
CN104809018B
CN104809018B CN201510253567.4A CN201510253567A CN104809018B CN 104809018 B CN104809018 B CN 104809018B CN 201510253567 A CN201510253567 A CN 201510253567A CN 104809018 B CN104809018 B CN 104809018B
Authority
CN
China
Prior art keywords
patch
level
function
level jump
instruction
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201510253567.4A
Other languages
English (en)
Other versions
CN104809018A (zh
Inventor
刘应江
简楹
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Wuhan Fiberhome Technical Services Co Ltd
Original Assignee
Fiberhome Telecommunication Technologies Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fiberhome Telecommunication Technologies Co Ltd filed Critical Fiberhome Telecommunication Technologies Co Ltd
Priority to CN201510253567.4A priority Critical patent/CN104809018B/zh
Publication of CN104809018A publication Critical patent/CN104809018A/zh
Application granted granted Critical
Publication of CN104809018B publication Critical patent/CN104809018B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Stored Programmes (AREA)

Abstract

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

Description

一种嵌入式系统软件注入热补丁的方法及系统
技术领域
本发明涉及嵌入式系统软件补丁技术领域,具体来讲是一种嵌入式系统软件注入热补丁的方法及系统。
背景技术
嵌入式系统应用非常广泛,家用DVD、机顶盒、通信设备中的交换机、路由器等都使用了嵌入式系统。嵌入式系统软件在嵌入式系统中具有举足轻重的作用,用户对嵌入式系统软件的连续运行时间和稳定性要求很高。如果嵌入式系统软件存在一般性的软件错误,采用热补丁技术进行在线修改软件的错误,能提高软件的连续运行时间和稳定性。
目前嵌入式系统软件注入热补丁的实现方式主要有以下两种:
(1)在编译程序的时候,在每一个函数首条指令的前面(指令地址递减方向)预留一定的空白区域,用以安排该函数的跳转指令序列,跳转到该函数的补丁函数。利用此种方法可以实现在线修复软件的错误,但是这种方式需要修改编译器,提供热补丁支持,同时每一个函数都预留一定的空白区域,有点浪费内存空间。
(2)直接在函数的头部区域插入该函数的跳转指令序列,跳转到该函数的补丁函数。利用此种方法同样可以实现在线修复软件的错误,但是这种方式需要停止除本线程之外的其他所有线程的运行,待插入该函数的跳转指令序列完成之后再恢复停止运行的线程,因此采用该种方法会影响程序的运行,补丁的启用过程时间较长。
发明内容
本发明的目的是为了克服上述背景技术的不足,提供一种嵌入式系统软件注入热补丁的方法及系统,不影响系统程序的运行,也无需修改编译器;且内存空间浪费少,补丁启用时间短。
为达到以上目的,本发明提供一种嵌入式系统软件注入热补丁的方法,包括以下步骤:
S1、在软件的程序编译阶段,在软件程序的各模块代码段中预留出若干二级跳转表预留区;在软件的补丁文件编译阶段,在补丁文件的各模块代码段中预留出若干三级跳转表预留区,转入步骤S2;
S2、将离每个原函数最近的二级跳转表预留区,作为该原函数的二级跳转指令存储空间;将离每个补丁函数最近的三级跳转表预留区,作为该补丁函数的三级跳转指令存储空间;
生成每个原函数的二级跳转指令序列,并存储于对应的二级跳转指令存储空间内;生成每个补丁函数的三级跳转指令序列,并存储于对应的三级跳转指令序列空间内,转入步骤S3;
S3、将每个原函数的首条指令修改为一级跳转指令;当系统运行每个原函数时,根据该原函数的一级跳转指令,由原函数跳转至对应二级跳转指令序列的首地址;根据该二级跳转指令序列,由该二级跳转指令序列跳转至对应三级跳转指令序列的首地址;根据该三级跳转指令序列,最终由三级跳转指令序列到函数补丁的跳转。
在上述技术方案的基础上,步骤S2包括以下步骤:
S201、查找并记录补丁文件中的补丁函数后,将补丁文件加载至系统中,转入步骤S202;
S202、记录所有补丁函数的地址;根据补丁函数名查找对应原函数的地址,转入步骤S203;
S203、在软件程序中查找二级跳转表预留区,记录二级跳转表预留区信息,转入步骤S204;
S204、在补丁文件中查找三级跳转表预留区,记录三级跳转表预留区信息,转入步骤S205;
S205、根据原函数的地址、二级跳转表预留区信息,将离每个原函数最近的二级跳转表预留区作为该原函数的二级跳转指令存储空间;根据补丁函数的地址、三级跳转表预留区信息,将离每个补丁函数最近的三级跳转表预留区作为该补丁函数的三级跳转指令存储空间,转入步骤S206;
S206、根据每个原函数的二级跳转指令存储空间的地址、以及对应的补丁函数的三级跳转指令存储空间的地址,生成每个原函数的二级跳转指令序列,并存储于对应的二级跳转指令存储空间内;根据补丁函数地址、以及该补丁函数的三级跳转指令存储空间的地址,生成每个补丁函数的三级跳转指令序列,并存储于对应的三级跳转指令序列空间内。
在上述技术方案的基础上,步骤S1中所述预留出若干二级跳转表预留区的同时,需为二级跳转表预留区定义一个标示符;所述预留出若干三级跳转表预留区的同时,需为三级跳转表预留区定义一个标示符;
步骤S201中所述将记录有补丁函数的补丁文件加载至系统中时,系统将自动为补丁文件的各模块生成对应的补丁文件模块名;
步骤S203具体包括以下步骤:获取并分析软件程序符号表中的一个符号信息;
若符号名为二级跳转表预留区标示符、且符号所在模块的模块名不是补丁文件模块名,则确定查找到二级跳转表预留区,记录该二级跳转表预留区地址、模块名;判断软件程序符号表是否全部查找完毕,若是,转到步骤S204,若否,重新执行步骤S203;
若符号名不为二级跳转表预留区标示符、或者符号所在模块的模块名是补丁文件模块名,则判断软件程序符号表是否全部查找完毕,若是,转到步骤S204,若否,重新执行步骤S203。
在上述技术方案的基础上,步骤S204具体包括以下步骤:获取并分析补丁文件符号表中的一个符号信息;
若符号名为三级跳转表预留区标示符、且符号所在模块的模块名是补丁文件模块名,则确定查找到三级跳转表预留区,记录该三级跳转表预留区地址、模块名;判断补丁文件符号表是否全部查找完毕,若是,转到步骤S205,若否,重新执行步骤S204;
若符号名不为三级跳转表预留区标示符、或者符号所在模块的模块名不是补丁文件模块名,则判断补丁文件符号表是否全部查找完毕,若是,转到步骤S205,若否,重新执行步骤S204。
在上述技术方案的基础上,步骤S201中所述补丁函数为符合补丁函数命名规则的函数,所述补丁函数命名规则为:补丁函数名=原函数名+补丁标示+用户自定义项。
在上述技术方案的基础上,步骤S2中所述二级跳转指令序列包括:将返回地址寄存器的值压入堆栈的指令、将跳转指令需要使用的寄存器压入堆栈的指令、将三级跳转指令序列的首地址赋值给寄存器的指令、跳转到三级跳转指令序列首地址的指令;所述三级跳转指令序列包括:还原二级跳转指令序列所使用的寄存器的值的指令、还原返回地址寄存器的值的指令、跳转至补丁函数首条地址的指令。
在上述技术方案的基础上,步骤S1中,通过修改软件程序的链接脚本,在软件程序的各模块代码段中预留出若干二级跳转表预留区;通过修改补丁文件的链接脚本,在补丁文件的各模块代码段中预留出若干三级跳转表预留区。
在上述技术方案的基础上,步骤S3之后还包括热补丁去激活的步骤:将原函数的首条指令还原为未修改成一级跳转指令之前的原指令。
本发明还提供一种嵌入式系统软件注入热补丁的系统,包括跳转表预留区管理模块、热补丁安装模块和热补丁激活模块,其中:
所述跳转表预留区管理模块用于:在软件的程序编译阶段,在软件程序的各模块代码段中预留出若干二级跳转表预留区;在软件的补丁文件编译阶段,在补丁文件的各模块代码段中预留出若干三级跳转表预留区;向热补丁安装模块发送热补丁安装信号;
所述热补丁安装模块用于:收到热补丁安装信号后,将离每个原函数最近的二级跳转表预留区,作为该原函数的二级跳转指令存储空间;将离每个补丁函数最近的三级跳转表预留区,作为该补丁函数的三级跳转指令存储空间;生成每个原函数的二级跳转指令序列,并存储于对应的二级跳转指令存储空间内;生成每个补丁函数的三级跳转指令序列,并存储于对应的三级跳转指令序列空间内;向热补丁激活模块发送热补丁激活信号;
所述热补丁激活模块用于:收到热补丁激活信号后,将每个原函数的首条指令修改为一级跳转指令;当系统运行每个原函数时,先根据该原函数的一级跳转指令,实现原函数到对应二级跳转指令序列的跳转;再根据该二级跳转指令序列,实现二级跳转指令序列到对应三级跳转指令序列的跳转;最后,根据该三级跳转指令序列,实现三级跳转指令序列到函数补丁的跳转。
在上述技术方案的基础上,该系统还包括热补丁去激活模块,所述热补丁去激活模块用于:将原函数的首条指令还原为未修改成一级跳转指令之前的原指令。
本发明的有益效果在于:
(1)本发明中,在代码编译阶段(软件的程序编译阶段、软件的补丁文件编译阶段),通过修改链接脚本预留出了若干二级跳转表预留区和若干三级跳转表预留区,这些预留区作为二级跳转指令序列、三级跳转指令序列的存储空间,可以避免在热补丁注入过程中对编译器进行修改,使操作更简化;并且,由于不用在每一个原函数的首条指令前面(指令地址递减方向)预留一定的空白区域,大大节省了系统内存空间。
(2)本发明中,采用三级跳转的方式,实现函数到补丁函数的跳转。其中,原函数到二级跳转表的跳转为一级跳转(由原函数内的一级跳转指令实现);二级跳转表到三级跳转表的跳转为二级跳转(由存储于二级跳转指令存储空间内的二级跳转指令序列实现);三级跳转表到补丁函数的跳转为三级跳转(由存储于三级跳转指令存储空间内的三级跳转指令序列实现)。由于每个二级跳转指令存储空间均为离对应原函数最近的二级跳转表预留区,每个三级跳转指令存储空间均为离对应补丁函数最近的三级跳转表预留区,因此,使得一级跳转为一次短跳转,三级跳转也为一次短跳转,仅二级跳转为一次长跳转。这种“短跳转-长跳转-短跳转”的三级跳转方式,使得原函数到补丁函数的跳转过程既弥补了一次短跳转无法跳转到距离较远的补丁函数地址的弊端,也避免了仅一次长跳转方式需要改变多条跳转指令而导致程序不稳定的现象,同时最后的短跳转过程能够将被修改的寄存器值还原,整个过程提高了系统的稳定性和热补丁激活效率。
(3)本发明中,在安装热补丁的时候,就已经分配好每一个函数的二级跳转指令存储空间、补丁函数的三级跳转指令存储空间,并生成了对应的二级跳转指令序列、三级跳转指令序列,因此在激活热补丁的时候,只需要将原函数的首条指令修改为一级跳转指令(短跳转指令),即可实现热补丁的快速激活,使得补丁启用时间短,且不需要停止除本线程之外的其他所有线程的运行,不影响系统程序的运行,提高了系统的稳定性。
(4)本发明的适用性广,适用于大多数支持符号表和动态加载的嵌入式系统。
附图说明
图1是本发明实施例中嵌入式系统软件注入热补丁的方法的流程图;
图2是本发明实施例中跳转表预留区的分布示意图;
图3是本发明实施例中热补丁安装的流程图;
图4是本发明实施例中三级跳转过程的示意图。
具体实施方式
下面结合附图及具体实施例对本发明作进一步的详细描述。
参见图1所示,本发明实施例提供一种嵌入式系统软件注入热补丁的方法,包括以下步骤:
S1、跳转表预留:在软件程序编译阶段,通过修改软件程序的链接脚本,在软件程序的各模块代码段中预留出若干二级跳转表预留区(如图2所示),并为二级跳转表预留区定义一个标示符,用于标示软件程序中的二级跳转表预留区;在补丁文件编译阶段,通过修改补丁文件的链接脚本,在补丁文件的各模块代码段中预留出若干三级跳转表预留区,并同样为三级跳转表预留区定义一个标示符,用于标示补丁文件中的三级跳转表预留区。
S2、热补丁安装:将离每个原函数最近的二级跳转表预留区,作为该原函数的二级跳转指令存储空间;将离每个补丁函数最近的三级跳转表预留区,作为该补丁函数的三级跳转指令存储空间;生成每个原函数的二级跳转指令序列,该二级跳转指令序列用于实现跳转至三级跳转指令序列,并存储于对应的二级跳转指令存储空间内;生成每个补丁函数的三级跳转指令序列,该三级跳转指令序列用于实现跳转至补丁函数,并存储于对应的三级跳转指令序列空间内。
其中,二级跳转指令序列包括:将返回地址寄存器的值压入堆栈的指令、将跳转指令需要使用的寄存器压入堆栈的指令、将三级跳转指令序列的首地址赋值给寄存器的指令、跳转到三级跳转指令序列首地址的指令。三级跳转指令序列包括:还原二级跳转指令序列所使用的寄存器的值的指令、还原返回地址寄存器的值的指令、跳转至补丁函数首条地址的指令。
如图3所示,实际操作时,步骤S2可按照以下操作进行:
S201、根据补丁文件的符号表,查找并记录补丁文件中的补丁函数后,将补丁文件加载至系统中,转入步骤S202;
其中,将补丁文件加载至系统中时,系统将自动为补丁文件的各模块生成对应的补丁文件模块名;查找并记录的补丁函数为符合补丁函数命名规则的函数,该补丁函数命名规则为:补丁函数名=原函数名+补丁标示+用户自定义项。
S202、记录所有补丁函数的地址;根据补丁函数名找到对应的原函数并记录该原函数地址,转入步骤S203。
S203、在软件程序中查找二级跳转表预留区,记录二级跳转表预留区信息,转入步骤S204;
具体来说,步骤S203包括以下步骤:获取并分析软件程序符号表中的一个符号信息;
若符号名为二级跳转表预留区标示符、且符号所在模块的模块名不是补丁文件模块名,则确定查找到二级跳转表预留区,记录该二级跳转表预留区地址、模块名;判断软件程序符号表是否全部查找完毕,若是,转到步骤S204,若否,重新执行步骤S203;
若符号名不为二级跳转表预留区标示符、或者符号所在模块的模块名是补丁文件模块名,则判断软件程序符号表是否全部查找完毕,若是,转到步骤S204,若否,重新执行步骤S203。
S204、在补丁文件中查找三级跳转表预留区,记录三级跳转表预留区信息,转入步骤S205;
具体来说,步骤S204具体包括以下步骤:获取并分析补丁文件符号表中的一个符号信息;
若符号名为三级跳转表预留区标示符、且符号所在模块的模块名是补丁文件模块名,则确定查找到三级跳转表预留区,记录该三级跳转表预留区地址、模块名;判断补丁文件符号表是否全部查找完毕,若是,转到步骤S205,若否,重新执行步骤S204;
若符号名不为三级跳转表预留区标示符、或者符号所在模块的模块名不是补丁文件模块名,则判断补丁文件符号表是否全部查找完毕,若是,转到步骤S205,若否,重新执行步骤S204。
S205、根据原函数的地址、二级跳转表预留区信息,将离每个原函数最近的二级跳转表预留区作为该原函数的二级跳转指令存储空间;根据补丁函数的地址、三级跳转表预留区信息,将离每个补丁函数最近的三级跳转表预留区作为该补丁函数的三级跳转指令存储空间,转入步骤S206。
S206、根据每个原函数的二级跳转指令存储空间的地址、以及对应的补丁函数的三级跳转指令存储空间的地址,生成每个原函数的二级跳转指令序列,并存储于对应的二级跳转指令存储空间内;根据补丁函数地址、以及该补丁函数的三级跳转指令存储空间的地址,生成每个补丁函数的三级跳转指令序列,并存储于对应的三级跳转指令序列空间内。
S3、热补丁激活:将每个原函数的首条指令修改为一级跳转指令;当系统运行每个原函数时(如图4所示),根据每个原函数的一级跳转指令,由原函数跳转至对应二级跳转指令序列的首地址(短跳转);根据该二级跳转指令序列,由该二级跳转指令序列跳转至对应三级跳转指令序列的首地址(长跳转);根据该三级跳转指令序列,最终由三级跳转指令序列到函数补丁的跳转(短跳转)。
上述步骤完成后,可根据用户的需要,在热补丁激活之后进行热补丁去激活操作,即将原函数的首条指令还原为未修改成一级跳转指令之前的原指令(原指令可在热补丁安装过程中,进行备份),从而实现原系统的恢复。
本发明实施例还提供一种嵌入式系统软件注入热补丁的系统,包括跳转表预留区管理模块、热补丁安装模块、热补丁激活模块和热补丁去激活模块,其中:
跳转表预留区管理模块用于:在软件的程序编译阶段,在软件程序的各模块代码段中预留出若干二级跳转表预留区;在软件的补丁文件编译阶段,在补丁文件的各模块代码段中预留出若干三级跳转表预留区;向热补丁安装模块发送热补丁安装信号;
热补丁安装模块用于:收到热补丁安装信号后,将离每个原函数最近的二级跳转表预留区,作为该原函数的二级跳转指令存储空间;将离每个补丁函数最近的三级跳转表预留区,作为该补丁函数的三级跳转指令存储空间;生成每个原函数的二级跳转指令序列,并存储于对应的二级跳转指令存储空间内;生成每个补丁函数的三级跳转指令序列,并存储于对应的三级跳转指令序列空间内;向热补丁激活模块发送热补丁激活信号;
热补丁激活模块用于:收到热补丁激活信号后,将每个原函数的首条指令修改为一级跳转指令;当系统运行每个原函数时,先根据该原函数的一级跳转指令,实现原函数到对应二级跳转指令序列的跳转;再根据该二级跳转指令序列,实现二级跳转指令序列到对应三级跳转指令序列的跳转;最后,根据该三级跳转指令序列,实现三级跳转指令序列到函数补丁的跳转;
热补丁去激活模块用于:将原函数的首条指令还原为未修改成一级跳转指令之前的原指令。
本发明不局限于上述实施方式,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也视为本发明的保护范围之内。本说明书中未作详细描述的内容属于本领域专业技术人员公知的现有技术。

Claims (10)

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所述的嵌入式系统软件注入热补丁的系统,其特征在于:该系统还包括热补丁去激活模块,所述热补丁去激活模块用于:将原函数的首条指令还原为未修改成一级跳转指令之前的原指令。
CN201510253567.4A 2015-05-18 2015-05-18 一种嵌入式系统软件注入热补丁的方法及系统 Active CN104809018B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201510253567.4A CN104809018B (zh) 2015-05-18 2015-05-18 一种嵌入式系统软件注入热补丁的方法及系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201510253567.4A CN104809018B (zh) 2015-05-18 2015-05-18 一种嵌入式系统软件注入热补丁的方法及系统

Publications (2)

Publication Number Publication Date
CN104809018A CN104809018A (zh) 2015-07-29
CN104809018B true CN104809018B (zh) 2018-01-02

Family

ID=53693869

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201510253567.4A Active CN104809018B (zh) 2015-05-18 2015-05-18 一种嵌入式系统软件注入热补丁的方法及系统

Country Status (1)

Country Link
CN (1) CN104809018B (zh)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105607937B (zh) * 2015-12-25 2019-01-18 京信通信系统(中国)有限公司 一种热补丁方法及设备
CN106055937B (zh) * 2016-05-25 2018-11-09 深圳创维数字技术有限公司 一种软件静态数据的加密方法及系统
CN110554998B (zh) * 2018-03-30 2024-02-13 腾讯科技(深圳)有限公司 一种通过替换函数内部指令的钩子方法、装置、终端及存储介质
CN109766145A (zh) * 2019-01-22 2019-05-17 杭州云缔盟科技有限公司 一种Windows下通过HOOK技术实现函数热补丁的方法
CN110045980B (zh) * 2019-05-22 2022-09-02 东信和平科技股份有限公司 一种对nb-iot设备的远程升级方法、设备及系统
CN110928570A (zh) * 2019-11-27 2020-03-27 北京知道创宇信息技术股份有限公司 一种固件升级的方法及装置、可读存储介质
CN111666096B (zh) * 2020-07-02 2021-03-16 腾讯科技(深圳)有限公司 目标应用的热更新方法和装置、存储介质和电子设备

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101004681A (zh) * 2006-12-22 2007-07-25 中兴通讯股份有限公司 嵌入式系统动态补丁长跳转的实现方法
CN102156661A (zh) * 2010-02-11 2011-08-17 华为技术有限公司 在线补丁的激活方法、装置及系统
CN102609241A (zh) * 2012-01-19 2012-07-25 中兴通讯股份有限公司 热补丁方法及装置
CN102982277A (zh) * 2012-12-24 2013-03-20 广东威创视讯科技股份有限公司 一种实现嵌入式系统软件补丁的方法和系统
CN103218262A (zh) * 2010-02-11 2013-07-24 华为技术有限公司 在线补丁的激活方法、装置及系统
CN103399775A (zh) * 2013-08-05 2013-11-20 北京华为数字技术有限公司 一种热补丁方法及设备
CN103530184A (zh) * 2013-10-24 2014-01-22 华为技术有限公司 一种在线补丁激活的方法及装置

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101697131B (zh) * 2009-11-04 2013-07-03 中兴通讯股份有限公司 一种可重定位文件动态加载的方法及装置
CN104424037B (zh) * 2013-08-29 2018-12-14 中兴通讯股份有限公司 一种动态补丁函数的方法及装置

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101004681A (zh) * 2006-12-22 2007-07-25 中兴通讯股份有限公司 嵌入式系统动态补丁长跳转的实现方法
CN102156661A (zh) * 2010-02-11 2011-08-17 华为技术有限公司 在线补丁的激活方法、装置及系统
CN103218262A (zh) * 2010-02-11 2013-07-24 华为技术有限公司 在线补丁的激活方法、装置及系统
CN102609241A (zh) * 2012-01-19 2012-07-25 中兴通讯股份有限公司 热补丁方法及装置
CN102982277A (zh) * 2012-12-24 2013-03-20 广东威创视讯科技股份有限公司 一种实现嵌入式系统软件补丁的方法和系统
CN103399775A (zh) * 2013-08-05 2013-11-20 北京华为数字技术有限公司 一种热补丁方法及设备
CN103530184A (zh) * 2013-10-24 2014-01-22 华为技术有限公司 一种在线补丁激活的方法及装置

Also Published As

Publication number Publication date
CN104809018A (zh) 2015-07-29

Similar Documents

Publication Publication Date Title
CN104809018B (zh) 一种嵌入式系统软件注入热补丁的方法及系统
CN101320596B (zh) 一种面向大容量flash固存的坏块管理方法
CN102004698B (zh) 一种闪存管理方法及系统
CN102779554A (zh) 多级数据存储单元的维护操作
CN103259718B (zh) 一种流表转换方法和装置
CN102799502A (zh) 一种星载嵌入式软件在轨维护方法
CN102637461A (zh) 支持坏块闪存扫描的启动方法
CN103777969B (zh) 一种无需重启部署服务器参数的方法和装置
CN103188161A (zh) 分布式数据加载调度方法与系统
CN104125168A (zh) 一种共享资源的调度方法和系统
CN104182295B (zh) 一种数据备份方法及装置
CN102694878A (zh) 一种分段式id分配方法
CN104570787B (zh) 用于影响控制器的控制程序的方法
CN102270174B (zh) 自动化测试方法和装置
CN103902483A (zh) 非易失性存储器的数据安排方法及存储器控制系统
CN102662863A (zh) 粗粒度的末级高速缓存旁路方法
CN103152627B (zh) 机顶盒时移数据存储方法、装置和机顶盒
CN107040817A (zh) 电视机配置信息的修改方法及系统
CN108170132B (zh) 一种基于串行总线的模块化eps总线处理方法
CN100449498C (zh) 数据储存装置
CN104199678B (zh) 获取板卡的类型id的方法和软件版本升级的方法
CN109344007B (zh) 一种双离合器变速器nvm数据校验方法及模块
CN108040080A (zh) 一种实现能源云服务系统应用模式快速转换的方法
CN106325877A (zh) 一种标签展示方法及装置
US20150311722A1 (en) Resource management method and system with clustering based on attributes of distributed energy resources

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
EXSB Decision made by sipo to initiate substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
TR01 Transfer of patent right

Effective date of registration: 20180323

Address after: 430074 Wuhan, Hongshan Province District Road, Department of mail, No. 88 hospital

Co-patentee after: WUHAN FIBERHOME TECHNICAL SERVICES CO., LTD.

Patentee after: Fenghuo Communication Science &. Technology Co., Ltd.

Address before: 430074 East Lake Development Zone, Hubei, Optics Valley Venture Street, No. 67, No.

Patentee before: Fenghuo Communication Science &. Technology Co., Ltd.

TR01 Transfer of patent right
TR01 Transfer of patent right

Effective date of registration: 20190718

Address after: 430000 Guanghuo Road Optical Communication Industry Building, Guandong Industrial Park, Donghu Development Zone, Wuhan City, Hubei Province, 1st Floor

Co-patentee after: WUHAN FIBERHOME TECHNICAL SERVICES CO., LTD.

Patentee after: Beacon Fire Ultra-micro Information Technology Co., Ltd.

Address before: 430074 Wuhan, Hongshan Province District Road, Department of mail, No. 88 hospital

Co-patentee before: WUHAN FIBERHOME TECHNICAL SERVICES CO., LTD.

Patentee before: Fenghuo Communication Science &. Technology Co., Ltd.

TR01 Transfer of patent right
TR01 Transfer of patent right

Effective date of registration: 20210628

Address after: No.4, Guanshan 2nd Road, Donghu Development Zone, Wuhan, Hubei 430000

Patentee after: WUHAN FIBERHOME TECHNICAL SERVICE Co.,Ltd.

Address before: 1 / F, optical communication industry building, Fenghuo Road, Guandong Industrial Park, Donghu Development Zone, Wuhan City, Hubei Province, 430000

Patentee before: FIBERHOME SUPERMICRO INFORMATION AND TECHNOLOGY Co.,Ltd.

Patentee before: WUHAN FIBERHOME TECHNICAL SERVICE Co.,Ltd.

TR01 Transfer of patent right