CN105988798B - 补丁处理方法及装置 - Google Patents
补丁处理方法及装置 Download PDFInfo
- Publication number
- CN105988798B CN105988798B CN201510076617.6A CN201510076617A CN105988798B CN 105988798 B CN105988798 B CN 105988798B CN 201510076617 A CN201510076617 A CN 201510076617A CN 105988798 B CN105988798 B CN 105988798B
- Authority
- CN
- China
- Prior art keywords
- patched
- function
- patch
- instruction
- patched function
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种补丁处理方法及装置,其中,该方法包括:检测被补丁进程中各个线程所对应待执行指令的指针是否均指向被补丁函数的头部,其中,被补丁进程为用于获取该被补丁函数和补丁函数的地址;在检测到各个线程所对应待执行指令的指针均未指向该被补丁函数的头部时,将被补丁函数替换为补丁函数。通过本发明解决了相关技术中采用长跳转指令方式时,不能有效解决指令修改过程的原子性的问题,进而实现了采用长跳转指令方式时,保证了指令修改过程的原子性的效果。
Description
技术领域
本发明涉及通信领域,具体而言,涉及补丁处理方法及装置。
背景技术
热补丁技术是系统在运行的过程中,通过函数替换,将有缺陷的函数替换为补丁函数,即在被补函数入口处通过跳转指令跳转到补丁函数,从而避开执行被补丁函数,转而执行补丁函数,以此达到修补缺陷的目的。所以,热补丁机制的基本问题可以归结为:
1)采用什么样的跳转指令,是短跳转还是长跳转;
2)如何保证指令修改过程的原子性,即修改过程中,被修改指令不可被任何执行流执行,必须等到全部指令修改完成方可。
二者的核心是问题2)的实现,而问题2)的复杂程度取决于问题1)中跳转方式的选择。
短跳转可以用单条指令来实现,而单条指令的替换本身就是原子的,所以这会给问题2的实现带来很大的便利性,大大简化了热补丁机制的设计,但是短跳转的缺点也是显而易见的,那就是跳转的范围很有限,尤其是在大型软件系统中,这个缺点更易凸显出来,会导致跳转距离远的地址无法到达,导致补丁打不上,当然可以采取特殊的技巧来规避短跳转的这个缺点。
如果采用长跳转指令,那么理论上可以跳转到任意地址,可以从根本上解决短跳转的缺陷,但是长跳转需要多条指令来实现,而多条指令的修改过程如果不加保护,原子性就得不到保障,这是很危险的,很容易破坏代码的一致性。
由此可见,短跳转要着力解决跳转距离的问题,而长跳转则要解决指令修改过程的原子性问题;
目前出现的大部分热补丁技术采用的都是短跳转,然后使用各种技巧来解决跳转距离的问题。
针对相关技术中,采用长跳转指令方式时,不能有效解决指令修改过程的原子性的问题,还未提出有效的解决方案。
发明内容
本发明提供了一种补丁处理方法及装置,以至少解决相关技术中采用长跳转指令方式时,不能有效解决指令修改过程的原子性的问题。
根据本发明的一个方面,提供了一种补丁处理方法,包括:检测被补丁进程中各个线程所对应待执行指令的指针是否均指向被补丁函数的头部,其中,所述被补丁进程为用于获取所述被补丁函数和补丁函数的地址;在检测到所述各个线程所对应待执行指令的指针均未指向所述被补丁函数的头部时,将所述被补丁函数替换为所述补丁函数。
进一步地,所述待执行指令的指针为存储于程序计数器PC中的指针。
进一步地,将所述被补丁函数替换为补丁函数包括:将位于所述被补丁函数的头部中的指令修改为用于跳转至所述补丁函数的指令,其中,将经过跳转指令修改后的所述被补丁函数称之为第一被补丁函数。
进一步地,检测被补丁进程中各个线程所对应待执行指令的指针是否均指向被补丁函数的头部之前包括:接收补丁激活请求;根据所述补丁激活请求获取补丁文件的名称及版本;根据所述补丁文件的名称及版本确定所述被补丁进程未打过与所述补丁文件对应的相同的补丁;对所述补丁文件进行解析,并根据解析结果获取所述被补丁函数的地址和所述补丁函数的地址。
进一步地,检测被补丁进程中各个线程所对应待执行指令的指针是否均指向被补丁函数的头部之前包括:停止运行所述各个线程;在所述各个线程中的指定线程所对应待执行指令的指针指向所述被补丁函数的头部时,运行所述指定线程,直至所述指定线程对应的待执行指令的指针未指向对应的被补丁函数的头部。
进一步地,将所述被补丁函数替换为所述补丁函数之后包括:在所述全部线程所对应待执行指令的指针满足以下条件时,对所述第一被补丁函数进行替换:所述全部线程所对应待执行指令的指针均未指向对应的所述第一被补丁函数的头部、所述全部线程所对应待执行指令的指针均未指向在任一所述补丁函数中、任一线程所对应待执行指令的指针之前的调用链均未落在所述补丁函数中。
进一步地,对所述第一被补丁函数进行替换包括:将所述第一被补丁函数中的跳转指令恢复为未对所述被补丁函数进行替换之前头部中的指令。
进一步地,对所述第一被补丁函数进行替换之前包括:接收补丁去激活请求。
根据本发明的另一个方面,还提供了一种补丁处理装置,包括:检测模块,用于检测被补丁进程中各个线程所对应待执行指令的指针是否均指向被补丁函数的头部,其中,所述被补丁进程为用于获取所述被补丁函数和补丁函数的地址;第一替换模块,用于在检测到所述各个线程所对应待执行指令的指针均未指向所述被补丁函数的头部时,将所述被补丁函数替换为所述补丁函数。
进一步地,所述待执行指令的指针为存储于程序计数器PC中的指针。
进一步地,所述第一替换模块还用于将位于所述被补丁函数的头部中的指令修改为用于跳转至所述补丁函数的指令,其中,将经过跳转指令修改后的所述被补丁函数称之为第一被补丁函数。
进一步地,所述装置还包括:第一接收模块,用于接收补丁激活请求;第一获取模块,用于根据所述补丁激活请求获取补丁文件的名称及版本;确定模块,用于根据所述补丁文件的名称及版本确定所述被补丁进程未打过与所述补丁文件对应的相同的补丁;第二获取模块,用于对所述补丁文件进行解析,并根据解析结果获取所述被补丁函数的地址和所述补丁函数的地址。
进一步地,所述装置还包括:第一运行模块,用于停止运行所述各个线程;第二运行模块,用于在所述各个线程中的指定线程所对应待执行指令的指针指向所述被补丁函数的头部时,运行所述指定线程,直至所述指定线程对应的待执行指令的指针未指向对应的被补丁函数的头部。
进一步地,所述装置还包括:第二替换模块,用于在所述全部线程所对应待执行指令的指针满足以下条件时,对所述第一被补丁函数进行替换:所述全部线程所对应待执行指令的指针均未指向对应的所述第一被补丁函数的头部、所述全部线程所对应待执行指令的指针均未指向在任一所述补丁函数中、任一线程所对应待执行指令的指针之前的调用链均未落在所述补丁函数中。
进一步地,所述第二替换模块还用于将所述第一被补丁函数中的跳转指令恢复为未对所述被补丁函数进行替换之前头部中的指令。
进一步地,所述装置还包括:第二接收模块,用于接收补丁去激活请求。
通过本发明,采用检测被补丁进程中各个线程所对应待执行指令的指针是否均指向被补丁函数的头部,其中,被补丁进程为用于获取该被补丁函数和补丁函数的地址;在检测到各个线程所对应待执行指令的指针均未指向该被补丁函数的头部时,将被补丁函数替换为补丁函数。解决了相关技术中采用长跳转指令方式时,不能有效解决指令修改过程的原子性的问题,进而实现了采用长跳转指令方式时,保证了指令修改过程的原子性的效果。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1是根据本发明实施例的补丁处理方法的流程图;
图2是根据本发明实施例的补丁处理装置的结构框图;
图3是根据本发明实施例的补丁处理装置的结构框图(一);
图4是根据本发明实施例的补丁处理装置的结构框图(二);
图5是根据本发明实施例的补丁处理装置的结构框图(三);
图6是根据本发明实施例的补丁处理装置的结构框图(四);
图7是根据本发明实施例的热补丁消息流程图。
具体实施方式
下文中将参考附图并结合实施例来详细说明本发明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。
在本实施例中提供了一种补丁处理方法,图1是根据本发明实施例的补丁处理方法的流程图,如图1所示,该流程包括如下步骤:
步骤S102,检测被补丁进程中各个线程所对应待执行指令的指针是否均指向被补丁函数的头部,其中,被补丁进程为用于获取被补丁函数和补丁函数的地址;
步骤S104,在检测到该各个线程所对应待执行指令的指针均未指向该被补丁函数的头部时,将被补丁函数替换为补丁函数。
通过上述步骤,在确定各个线程所对应待执行指令的指针均未指向该被补丁函数的头部时,才将被补丁函数替换为补丁函数,解决了相关技术中采用长跳转指令方式时,不能有效解决指令修改过程的原子性的问题,进而实现了采用长跳转指令方式时,保证了指令修改过程的原子性的效果。
在一个可选实施例中,上述待执行指令的指针为存储于程序计数器PC中的指针。
上述步骤S104中涉及到将被补丁函数替换为补丁函数,在一个可选实施例中,通过将位于被补丁函数的头部中的指令修改为用于跳转至补丁函数的指令,完成将被补丁函数替换为补丁函数,其中,此处将经过跳转指令修改后的被补丁函数称之为第一被补丁函数。
在一个可选实施例中,检测被补丁进程中各个线程所对应待执行指令的指针是否均指向被补丁函数的头部之前,接收补丁激活请求,根据补丁激活请求获取补丁文件的名称及版本,根据补丁文件的名称及版本确定被补丁进程未打过与补丁文件对应的相同的补丁,对补丁文件进行解析,并根据解析结果获取被补丁函数的地址和补丁函数的地址。
在另一个可选实施例中,检测被补丁进程中各个线程所对应待执行指令的指针是否均指向被补丁函数的头部之前,停止运行各个线程,在各个线程中的指定线程所对应待执行指令的指针指向被补丁函数的头部时,运行指定线程,直至该指定线程对应的待执行指令的指针未指向对应的被补丁函数的头部。从而保证了指令修改过程是不被中断的,即是具备原子性的。
将该被补丁函数替换为该补丁函数之后还涉及到去激活的过程,在一个可选实施例中,在全部线程所对应待执行指令的指针满足以下条件时,对第一被补丁函数进行替换:全部线程所对应待执行指令的指针均未指向对应的第一被补丁函数的头部、全部线程所对应待执行指令的指针均未指向在任一补丁函数中、任一线程所对应待执行指令的指针之前的调用链均未落在补丁函数中。
关于上述步骤中,对第一被补丁函数进行替换,在一个可选实施例中,将第一被补丁函数中的跳转指令恢复为未对被补丁函数进行替换之前头部中的指令。
在一个可选实施例中,对第一被补丁函数进行替换之前,接收补丁去激活请求。
在本实施例中还提供了一种补丁处理装置,该装置用于实现上述实施例及优选实施方式,已经进行过说明的不再赘述。如以下所使用的,术语“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。
图2是根据本发明实施例的补丁处理装置的结构框图,如图2所述,该装置包括:检测模块22,用于检测被补丁进程中各个线程所对应待执行指令的指针是否均指向被补丁函数的头部,其中,该被补丁进程为用于获取该被补丁函数和补丁函数的地址;第一替换模块24,用于在检测到该各个线程所对应待执行指令的指针均未指向该被补丁函数的头部时,将该被补丁函数替换为该补丁函数。
可选地,待执行指令的指针为存储于程序计数器PC中的指针。
可选地,第一替换模块24还用于将位于该被补丁函数的头部中的指令修改为用于跳转至该补丁函数的指令,其中,将经过跳转指令修改后的被补丁函数称之为第一被补丁函数。
图3是根据本发明实施例的补丁处理装置的结构框图(一),如图3所示,装置还包括:第一接收模块32,用于接收补丁激活请求;第一获取模块34,用于根据该补丁激活请求获取补丁文件的名称及版本;确定模块36,用于根据该补丁文件的名称及版本确定该被补丁进程未打过与该补丁文件对应的相同的补丁;第二获取模块38,用于对该补丁文件进行解析,并根据解析结果获取该被补丁函数的地址和该补丁函数的地址。
图4是根据本发明实施例的补丁处理装置的结构框图(二),如图4所示,该装置还包括:第一运行模块42,用于停止运行该各个线程;第二运行模块44,用于在该各个线程中的指定线程所对应待执行指令的指针指向该被补丁函数的头部时,运行该指定线程,直至该指定线程对应的待执行指令的指针未指向对应的被补丁函数的头部。
图5是根据本发明实施例的补丁处理装置的结构框图(三),如图5所示,该装置还包括:第二替换模块52,用于在该全部线程所对应待执行指令的指针满足以下条件时,对该第一被补丁函数进行替换:该全部线程所对应待执行指令的指针均未指向对应的被补丁函数的头部、该全部线程所对应待执行指令的指针均未指向在任一该补丁函数中、任一线程所对应待执行指令的指针之前的调用链均未落在该补丁函数中。
可选地,第二替换模块52还用于将该第一被补丁函数中的跳转指令恢复为未对该被补丁函数进行替换之前头部中的指令。
图6是根据本发明实施例的补丁处理装置的结构框图(四),如图6所示,该装置还包括:第二接收模块62,用于接收补丁去激活请求。
需要说明的是,上述各个模块是可以通过软件或硬件来实现的,对于后者,可以通过以下方式实现,但不限于此:上述各个模块均位于同一处理器中;或者,上述各个模块分别位于第一处理器、第二处理器和第三处理器…中。
针对相关技术中存在的上述问题,下面结合可选实施例进行说明,在本可选实施例中结合了上述可选实施例及其可选实施方式。
本可选实施例采用长跳转指令方式,并且使用一种简单的机制来保障长跳转指令修改过程的原子性。
因为长跳转由多条指令组成,所以修改这些指令势必会牵涉到指令一致性问题,即修改指令的过程可能会被中断,导致指令修改不完整、指令序列不一致,并且随后这些被部分修改的指令被执行,这些前后不一致的指令被执行会导致致命的错误,所以指令修改过程必须是不被中断的,即原子的。本发明使用一种简单实用的机制来保证指令修改过程的原子性。
确定采用长跳转方式,这种跳转方式可以跳转到任何地址。
打补丁过程由三个进程合作完成,用户交互进程、补丁管理进程、被补丁进程。
用户交互进程接收用户补丁请求,包括补丁的激活、去激活请求。接收到激活请求后,根据补丁文件的名称及版本,查找对应被补丁进程是否已经打过相同的补丁,如果没有,记录本次请求内容,即补丁名称及版本,随后将请求内容以消息形式派发给被补丁进程,接着等待被补丁进程的响应,直至超时。如果被补丁进程打过相同的补丁,那么直接返回。
被补丁进程接收到补丁激活消息后,解开补丁文件,验证补丁头,验证无误后提取补丁动态库,然后加载补丁动态库,定位补丁函数和被补丁函数的地址,做好补丁激活的准备工作,然后被补丁进程将被补丁函数与补丁函数的地址发送给补丁管理进程,由后者完成最终的函数替换工作。
补丁管理进程收到被补丁进程发送的补丁激活消息后,停住被补丁进程内所有线程,即让被补丁进程处于完全静止的状态,然后判断被补丁进程此刻能否安全地进行函数替换,即判断被补丁进程内各个线程的程序计数器,装载即将执行的指令地址的寄存器(Program Counter,简称为PC)是否落在被补丁函数的头部,如果均没有落在任一被补丁函数的头部,那么可以进行函数替换。
如果上述测试不满足条件,记录下所有不满足条件的线程,然后让这些线程运行一小段时间,目的是让各个线程的PC指针有机会离开被补丁函数的头部,运行结束后,再次判断这些线程的PC,不满足条件的接着运行,就这样不断运行不满足条件的线程,直到最大运行次数。
到达最大运行次数前,如果已经没有线程不满足条件,即被补丁进程内所有线程已经全部满足打补丁的条件,那么接着进行各个被补丁函数的替换工作;否则,本次补丁激活请求宣告失败。
被补丁函数的替换,就是将被补丁函数的头几条指令修改成跳转至对应补丁函数的指令,由于此刻被补丁进程是静止的,没有任何执行流,所以指令修改过程不会被打断,从而可以保证指令修改过程的原子性。正是通过这种让被补丁进程静止的方法来达到指令修改过程的原子性。
所有被补丁函数的指令修改完成后,启动被补丁进程内所有线程,补丁管理进程将操作结果返回给被补丁进程,被补丁进程接着将操作结果返回给用户交互进程,最终用户交互进程将结果返回给用户,本次补丁激活流程至此全部完成。
补丁去激活就是恢复被补丁函数的原先指令,补丁激活过程中,指令修改时,会将被补丁函数的指令保存起来以便后续恢复。去激活流程与激活流程一致,请求经由用户交互进程到被补丁进程,然后到补丁管理进程。恢复被补丁函数的指令时,判据更加严格,要求被补丁函数内所有线程的PC满足:
1)不落在任一被补丁函数的头几条指令中;
2)不落在当前要去激活的补丁区域中,即不落在任一补丁函数中;
3)以当前PC为起点往后回溯调用链,要求调用链不穿过补丁区域;
只有满足以上3个条件,才可以安全地卸载补丁,否则会导致致命错误。
本可选实施例提供了一个通用的软件热补丁方法,图7是根据本发明实施例的热补丁消息流程图,如图7所示,包括如下步骤:
步骤一,用户交互进程接收来自用户的激活/去激活请求,接收到请求后会根据已有的记录信息查看该请求是否已经执行过,如果没有,则会记录该请求,然后将请求打包成消息推送给被补丁进程,否则直接返回。
例如用户请求激活补丁/home/test.patch,会将补丁绝对路径名/home/test.patch及被补丁进程名发给用户交互进程,后者根据补丁名称test.patch搜索被补丁进程补丁列表,检查是否存在相同名称的补丁,如果找到,说明该补丁已经打过,直接返回,否则,将绝对路径/home/test.patch发送给被补丁进程。
步骤二,被补丁进程接收到补丁消息后,如果是激活消息,就解开补丁包验证补丁的有效性,然后提取补丁包的内容生成补丁动态库,加载该动态库,根据补丁头内容定位补丁函数及被补丁函数的地址,并作记录,以防对同一个函数叠加打补丁,做好这些准备工作后,将补丁函数及被补丁函数打包成消息发送给补丁管理函数,由后者完成真正的补丁激活工作。如果是去激活消息,根据补丁版本信息获取补丁信息,然后向补丁管理进程请求去激活补丁。
收到补丁激活消息,被补丁进程首先打开包含在激活消息中的补丁文件绝对路径名/home/test.patch,test.patch文件由两部分组成:补丁说明部分、补丁实体。补丁说明部分包括被补丁函数名称列表、补丁函数名称列表、补丁函数个数等信息;补丁实体则是由补丁代码编译生成的动态库文件。这两部分信息被分别提取出来,后者单独存放到一个新的文件中并打开,至此,补丁代码加载完毕,然后分别查找被补丁函数与补丁函数的地址,接着将被补丁函数与补丁函数的地址列表发送给补丁管理进程去激活。如果是去激活的话,那么只需根据收到的补丁信息查找被补丁函数列表及补丁动态库,然后提交给补丁管理进程去去激活。
步骤三,补丁管理进程收到补丁消息后,如果是激活消息,就将被补丁进程内所有的线程全部停住,检查此刻能否进行被补丁函数的指令替换,即所有线程的PC指针均不落在任一被补函数的头部,如果可以,则进行指令修改,否则,进行判据收敛,即不断进行运行、判断直至最大运行次数,若判据收敛,则进行指令修改,否则宣告失败;如果是去激活,同样首先进行判据收敛,只是判据更为严格,如上文所述。
综上所述,通过本发明解决了相关技术中采用长跳转指令方式时,不能有效解决指令修改过程的原子性的问题,进而实现了采用长跳转指令方式时,保证了指令修改过程的原子性的效果。
在另外一个实施例中,还提供了一种软件,该软件用于执行上述实施例及优选实施方式中描述的技术方案。
在另外一个实施例中,还提供了一种存储介质,该存储介质中存储有上述软件,该存储介质包括但不限于:光盘、软盘、硬盘、可擦写存储器等。
显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (14)
1.一种补丁处理方法,其特征在于,包括:
检测被补丁进程中各个线程所对应待执行指令的指针是否均指向被补丁函数的头部,其中,所述被补丁进程为用于获取所述被补丁函数和补丁函数的地址;
在检测到所述各个线程所对应待执行指令的指针均未指向所述被补丁函数的头部时,将所述被补丁函数替换为所述补丁函数,将替换后的所述被补丁函数称之为第一被补丁函数;
在全部线程所对应待执行指令的指针满足以下条件时,对所述第一被补丁函数进行替换:
所述全部线程所对应待执行指令的指针均未指向对应的所述第一被补丁函数的头部、所述全部线程所对应待执行指令的指针均未指向在任一所述补丁函数中、以及任一线程所对应待执行指令的指针之前的调用链均未落在所述补丁函数中。
2.根据权利要求1所述的方法,其特征在于,所述待执行指令的指针为存储于程序计数器PC中的指针。
3.根据权利要求1所述的方法,其特征在于,将所述被补丁函数替换为补丁函数包括:
将位于所述被补丁函数的头部中的指令修改为用于跳转至所述补丁函数的指令,其中,将经过跳转指令修改后的所述被补丁函数称之为所述第一被补丁函数。
4.根据权利要求1所述的方法,其特征在于,检测被补丁进程中各个线程所对应待执行指令的指针是否均指向被补丁函数的头部之前包括:
接收补丁激活请求;
根据所述补丁激活请求获取补丁文件的名称及版本;
根据所述补丁文件的名称及版本确定所述被补丁进程未打过与所述补丁文件对应的相同的补丁;
对所述补丁文件进行解析,并根据解析结果获取所述被补丁函数的地址和所述补丁函数的地址。
5.根据权利要求1所述的方法,其特征在于,检测被补丁进程中各个线程所对应待执行指令的指针是否均指向被补丁函数的头部之前包括:
停止运行所述各个线程;
在所述各个线程中的指定线程所对应待执行指令的指针指向所述被补丁函数的头部时,运行所述指定线程,直至所述指定线程对应的待执行指令的指针未指向对应的被补丁函数的头部。
6.根据权利要求1-5任一项所述的方法,其特征在于,对所述第一被补丁函数进行替换包括:
将所述第一被补丁函数中的跳转指令恢复为未对所述被补丁函数进行替换之前头部中的指令。
7.根据权利要求1-5任一项所述的方法,其特征在于,对所述第一被补丁函数进行替换之前包括:
接收补丁去激活请求。
8.一种补丁处理装置,其特征在于,包括:
检测模块,用于检测被补丁进程中各个线程所对应待执行指令的指针是否均指向被补丁函数的头部,其中,所述被补丁进程为用于获取所述被补丁函数和补丁函数的地址;
第一替换模块,用于在检测到所述各个线程所对应待执行指令的指针均未指向所述被补丁函数的头部时,将所述被补丁函数替换为所述补丁函数,将替换后的所述被补丁函数称之为第一被补丁函数;
第二替换模块,用于在全部线程所对应待执行指令的指针满足以下条件时,对所述第一被补丁函数进行替换:
所述全部线程所对应待执行指令的指针均未指向对应的所述第一被补丁函数的头部、所述全部线程所对应待执行指令的指针均未指向在任一所述补丁函数中、以及任一线程所对应待执行指令的指针之前的调用链均未落在所述补丁函数中。
9.根据权利要求8所述的装置,其特征在于,所述待执行指令的指针为存储于程序计数器PC中的指针。
10.根据权利要求8所述的装置,其特征在于,所述第一替换模块还用于将位于所述被补丁函数的头部中的指令修改为用于跳转至所述补丁函数的指令,其中,将经过跳转指令修改后的所述被补丁函数称之为所述第一被补丁函数。
11.根据权利要求8所述的装置,其特征在于,所述装置还包括:
第一接收模块,用于接收补丁激活请求;
第一获取模块,用于根据所述补丁激活请求获取补丁文件的名称及版本;
确定模块,用于根据所述补丁文件的名称及版本确定所述被补丁进程未打过与所述补丁文件对应的相同的补丁;
第二获取模块,用于对所述补丁文件进行解析,并根据解析结果获取所述被补丁函数的地址和所述补丁函数的地址。
12.根据权利要求8所述的装置,其特征在于,所述装置还包括:
第一运行模块,用于停止运行所述各个线程;
第二运行模块,用于在所述各个线程中的指定线程所对应待执行指令的指针指向所述被补丁函数的头部时,运行所述指定线程,直至所述指定线程对应的待执行指令的指针未指向对应的被补丁函数的头部。
13.根据权利要求8-12任一项所述的装置,其特征在于,所述第二替换模块还用于将所述第一被补丁函数中的跳转指令恢复为未对所述被补丁函数进行替换之前头部中的指令。
14.根据权利要求8-12任一项所述的装置,其特征在于,所述装置还包括:
第二接收模块,用于接收补丁去激活请求。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510076617.6A CN105988798B (zh) | 2015-02-12 | 2015-02-12 | 补丁处理方法及装置 |
PCT/CN2015/083913 WO2016127566A1 (zh) | 2015-02-12 | 2015-07-13 | 补丁处理方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510076617.6A CN105988798B (zh) | 2015-02-12 | 2015-02-12 | 补丁处理方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105988798A CN105988798A (zh) | 2016-10-05 |
CN105988798B true CN105988798B (zh) | 2020-07-31 |
Family
ID=56614077
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510076617.6A Active CN105988798B (zh) | 2015-02-12 | 2015-02-12 | 补丁处理方法及装置 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN105988798B (zh) |
WO (1) | WO2016127566A1 (zh) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107870777A (zh) * | 2016-09-23 | 2018-04-03 | 中兴通讯股份有限公司 | 一种热补丁实现方法及装置、终端 |
CN107341110B (zh) * | 2017-07-11 | 2020-01-07 | 浪潮软件集团有限公司 | 一种软件测试定位补丁修改及影响范围的工具及实现方法 |
CN107357622B (zh) * | 2017-07-17 | 2020-09-22 | 迈普通信技术股份有限公司 | 热补丁实现方法及通信设备 |
CN110457151B (zh) * | 2019-07-10 | 2022-01-28 | 五八有限公司 | 热修复方法、装置及可读存储介质 |
CN112988182A (zh) | 2019-12-13 | 2021-06-18 | 中兴通讯股份有限公司 | Linux内核热补丁实现方法、电子设备及计算机可读介质 |
CN111694594B (zh) * | 2020-05-18 | 2023-03-03 | 成都盛芯微科技有限公司 | 补丁程序的控制方法和系统 |
CN111949290B (zh) * | 2020-07-14 | 2022-10-14 | 锐捷网络股份有限公司 | 一种热补丁管理方法、装置、电子设备及存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040158827A1 (en) * | 1999-12-30 | 2004-08-12 | Kasper Christian D. | Method and apparatus for changing microcode to be executed in a processor |
CN101008899A (zh) * | 2007-01-26 | 2007-08-01 | 上海华为技术有限公司 | 通信设备中软件版本升级的方法及装置 |
CN101689121A (zh) * | 2007-06-28 | 2010-03-31 | 微软公司 | 安全软件部署 |
CN103744709A (zh) * | 2014-01-23 | 2014-04-23 | 华为技术有限公司 | 补丁加载方法及装置 |
CN104125101A (zh) * | 2014-08-12 | 2014-10-29 | 烽火通信科技股份有限公司 | 通信系统网元使用热补丁批量升级所属业务单盘的方法 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8468516B1 (en) * | 2008-12-19 | 2013-06-18 | Juniper Networks, Inc. | Creating hot patches for embedded systems |
CN101799763B (zh) * | 2009-02-10 | 2013-01-30 | 华为技术有限公司 | 内核在线补丁的方法、装置和系统 |
CN102467394A (zh) * | 2010-11-12 | 2012-05-23 | 中兴通讯股份有限公司 | 多核热补丁的实现方法及系统 |
CN103885808A (zh) * | 2014-04-08 | 2014-06-25 | 北京奇虎科技有限公司 | 热补丁处理方法及装置 |
-
2015
- 2015-02-12 CN CN201510076617.6A patent/CN105988798B/zh active Active
- 2015-07-13 WO PCT/CN2015/083913 patent/WO2016127566A1/zh active Application Filing
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040158827A1 (en) * | 1999-12-30 | 2004-08-12 | Kasper Christian D. | Method and apparatus for changing microcode to be executed in a processor |
CN101008899A (zh) * | 2007-01-26 | 2007-08-01 | 上海华为技术有限公司 | 通信设备中软件版本升级的方法及装置 |
CN101689121A (zh) * | 2007-06-28 | 2010-03-31 | 微软公司 | 安全软件部署 |
CN103744709A (zh) * | 2014-01-23 | 2014-04-23 | 华为技术有限公司 | 补丁加载方法及装置 |
CN104125101A (zh) * | 2014-08-12 | 2014-10-29 | 烽火通信科技股份有限公司 | 通信系统网元使用热补丁批量升级所属业务单盘的方法 |
Non-Patent Citations (1)
Title |
---|
嵌入式Linux操作系统内核热补丁研究与实现;孙胜方;《中国优秀硕士学位论文全文数据库》;20110430;第42-49页 * |
Also Published As
Publication number | Publication date |
---|---|
CN105988798A (zh) | 2016-10-05 |
WO2016127566A1 (zh) | 2016-08-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105988798B (zh) | 补丁处理方法及装置 | |
AU2018203054B2 (en) | System of distributed software quality improvement | |
Dumitraş et al. | Why do upgrades fail and what can we do about it? Toward dependable, online upgrades in enterprise system | |
US9720816B2 (en) | Software development assistant method and system | |
CN105843741B (zh) | 应用程序的信息处理方法和装置 | |
KR101410099B1 (ko) | 단위 테스트 케이스 재사용 기반의 함수 테스트 장치 및 그 함수 테스트 방법 | |
Xu et al. | POD-Diagnosis: Error diagnosis of sporadic operations on cloud applications | |
KR100868762B1 (ko) | 임베디드용 소프트웨어의 오류 검출 방법 | |
US10635473B2 (en) | Setting support program, setting support method, and setting support device | |
US7512933B1 (en) | Method and system for associating logs and traces to test cases | |
CN106155883B (zh) | 一种虚拟机可靠性测试方法及装置 | |
US8661418B2 (en) | Setting program, workflow creating method, and work flow creating apparatus | |
US20180052725A1 (en) | A method for identifying a cause for a failure of a test | |
CN110795128B (zh) | 一种程序漏洞修复方法、装置、存储介质及服务器 | |
CN108776643B (zh) | 一种基于版本控制流程的目标代码合并控制方法及系统 | |
US8276021B2 (en) | Concurrency test effectiveness via mutation testing and dynamic lock elision | |
US11822423B2 (en) | Structured software delivery and operation automation | |
Pina et al. | Tedsuto: A general framework for testing dynamic software updates | |
CN109635568A (zh) | 一种基于静态分析和模糊测试相结合的并发漏洞检测方法 | |
WO2015027403A1 (en) | Testing multi-threaded applications | |
CN105074656A (zh) | 管理并发谓词表达式的方法和装置 | |
CN113672273B (zh) | 数据处理方法、系统及设备 | |
US8689206B2 (en) | Isolating operating system in-memory modules using error injection | |
WO2021249518A1 (zh) | 热补丁文件生成、一致性检测方法、装置、设备和介质 | |
JP2023044720A (ja) | クラッシュしたアプリケーションを修復するためのコンピュータ実装方法、コンピュータプログラム製品、およびリモートコンピュータサーバ(クラッシュしたプロセスのリモート修復) |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20200706 Address after: 210012 Nanjing, Yuhuatai District, South Street, Bauhinia Road, No. 68 Applicant after: Nanjing Zhongxing Software Co.,Ltd. Address before: 518057 Nanshan District science and technology, Guangdong Province, South Road, No. 55, No. Applicant before: ZTE Corp. |
|
TA01 | Transfer of patent application right | ||
GR01 | Patent grant | ||
GR01 | Patent grant |