CN102156661B - 在线补丁的激活方法、装置及系统 - Google Patents

在线补丁的激活方法、装置及系统 Download PDF

Info

Publication number
CN102156661B
CN102156661B CN2010101136462A CN201010113646A CN102156661B CN 102156661 B CN102156661 B CN 102156661B CN 2010101136462 A CN2010101136462 A CN 2010101136462A CN 201010113646 A CN201010113646 A CN 201010113646A CN 102156661 B CN102156661 B CN 102156661B
Authority
CN
China
Prior art keywords
patch
function
instruction
mesozone
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
CN2010101136462A
Other languages
English (en)
Other versions
CN102156661A (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.)
Huawei Technologies Co Ltd
Original Assignee
Huawei 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 Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Priority to CN2010101136462A priority Critical patent/CN102156661B/zh
Priority to CN201310157498.8A priority patent/CN103218262B/zh
Priority to EP10845571.8A priority patent/EP2434394B1/en
Priority to PCT/CN2010/078271 priority patent/WO2011097901A1/zh
Publication of CN102156661A publication Critical patent/CN102156661A/zh
Priority to US13/336,227 priority patent/US9075692B2/en
Application granted granted Critical
Publication of CN102156661B publication Critical patent/CN102156661B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/65Updates
    • G06F8/656Updates while running

Abstract

本发明实施例公开了一种在线补丁的激活方法、装置及系统,其中,所述方法包括:定位补丁函数的地址和待打补丁函数的入口地址;基于所述补丁函数的地址和所述待打补丁函数的入口地址,在中间区写入用于跳转到所述补丁函数的长跳转指令,其中所述中间区为处于待打补丁函数入口位置前或后,且能放置至少一条长跳转指令的存储空间;将待打补丁函数入口位置处的指令修改为跳转到所述中间区的短跳转指令,使得所述短跳转指令被执行后,跳转到所述中间区,通过中间区中指令的执行跳转到所述补丁函数执行。通过本发明实施例,从而提高应用软件在线补丁激活时的安全性和可靠性。

Description

在线补丁的激活方法、装置及系统
技术领域
本发明涉及计算机技术领域,具体涉及一种在线补丁的激活方法、装置及系统。
背景技术
在线补丁是指程序运行中不重启程序而生效的补丁,广泛应用于各类软件。参见图1,激活在线补丁的基本原理是将要原函数(即待打补丁的函数)的入口处的指令替换为跳转指令,然后通过替换的跳转指令将调用原函数的程序跳转到的补丁函数中执行。随着Linux X86系统在电信领域的广泛应用,同样要求对Linux系统中的应用软件能够在线打补丁,但由于X86系统的指令特点以及Linux的调度方式,使得简单的将被替换函数的入口处指令改为跳转指令的补丁激活方式变得不完全可靠,不能满足电信软件对可靠性的要求。
参见图2,在Linux X86系统中,无条件跳转指令占5个字节,激活在线补丁时绝大多数情况下都会覆盖原函数入口处的3条指令,称原函数中这3条指令占用的5个字节的区域为临界区。如果激活在线补丁时直接将原函数入口处的指令替换为跳转指令,则当进程中有多个线程时,有可能出现某线程执行到临界区处(如执行到第一条或第二条指令)时刚好发生线程切换的情况,若此时激活在线补丁,该线程切换回来后由于原函数的临界区代码已被新的跳转指令覆盖,程序便会发生异常。
现有技术一般使用Pannus补丁技术,具体包括以下步骤:
(1)使用函数ptrace将原函数的进程暂停;
(2)检查原函数所有线程的EIP(extended instruction pointer,指令指针寄存器)值是否在临界区;
(3)如果没有线程的EIP值在临界区,则在补丁函数入口写入跳转指令,恢复进程的执行;
(4)如果有线程的EIP值在临界区,则恢复进程执行一段时间,重新暂停进程进行检查;
(5)检查若干次(可自定义,如10次)后,如果还不能激活补丁,则返回激活补丁失败。
由于Pannus先暂停原函数进程,再检查所有线程的EIP值是否在临界区,因此,可以在一定程度上避免因直接写入而发生的程序异常。
发明人在实现本发明过程中,发现现有技术中:
替换函数前只检查当前线程EIP值是否在临界区,一旦有线程是在信号处理函数中,信号的返回地址在临界区内,则在线程处理完信号处理函数后返回时,由于临界区已被跳转指令覆盖,这时将会导致程序出错,因此这种现有技术方案仍然不能保证激活补丁时安全可靠。
发明内容
本发明实施例在于提供一种软件在线补丁的激活方法及系统,以提高应用软件在线补丁激活时的安全性和可靠性。
本发明实施例是通过以下技术方案实现的:
一种在线补丁激活方法,包括如下步骤:
定位补丁函数的地址和待打补丁函数的入口地址;
基于所述补丁函数的地址和所述待打补丁函数的入口地址,在中间区写入用于跳转到所述补丁函数的长跳转指令,其中所述中间区为处于待打补丁函数入口位置前或后,且能放置至少一条长跳转指令的存储空间;
将待打补丁函数入口位置处的指令修改为跳转到所述中间区的短跳转指令,使得所述短跳转指令被执行后,跳转到所述中间区,通过所述中间区指令的执行跳转到所述补丁函数执行。
以及,一种通信系统,所述通信系统包括至少一个CPU和内存,所述CPU上运行有操作系统,所述操作系统之上运行有至少一种应用程序,所述应用程序关联有补丁管理线程和至少一个业务线程,其中:
所述内存中载入有包含至少一个待打补丁函数的应用程序和包含补丁函数的补丁文件,其中,所述待打补丁函数的入口位置前或后具有能放置至少一条长跳转指令的存储空间;
所述补丁管理线程用于在所述应用程序的运行过程中,定位所述补丁函数的地址和所述待打补丁函数的入口地址,并在所述存储空间写入用于跳转到所述补丁函数的长跳转指令,以及将所述待打补丁函数入口位置处的指令修改为用于跳转到所述存储空间的短跳转指令;
所述业务线程用于执行到待打补丁函数入口位置处的短跳转指令,跳转到所述存储空间,通过所述存储空间中指令的执行跳转到所述补丁函数执行。
以及,一种补丁管理装置,所述装置包括:
地址定位单元,用于在待打补丁应用程序的运行过程中,定位与该应用程序关联的补丁函数的地址和待打补丁函数的入口地址;
长跳转指令单元,用于基于所述补丁函数的地址和所述待打补丁函数的入口地址,在中间区写入用于跳转到所述补丁函数的长跳转指令,其中所述中间区为处于待打补丁函数入口位置前或后,且能放置至少一条长跳转指令的存储空间;
短跳转指令单元,用于将待打补丁函数入口位置处的指令修改为跳转到所述中间区的短跳转指令,使得所述短跳转指令被执行后,跳转到所述中间区,通过所述中间区中指令的执行跳转到所述补丁函数执行。
可见,本发明实施例通过在待打补丁程序的函数前或后的存储空间写入跳转到所述补丁函数的长跳转指令,以及将待打补丁函数入口位置处的指令修改为跳转到所述存储空间的短跳转指令,补丁激活时通过该存储空间中指令的执行进行跳转使补丁生效,由于修改函数入口位置处的指令的操作是原子操作,即修改前的指令和修改后的指令的指令长度相同,因而仅修改一条指令即可,无需覆盖临界区其它指令,从而避免了现有技术中对应用软件在线补丁激活时,因系统采用复杂指令集,跳转指令会覆盖函数入口的多条指令,而导致多线程调度机制下所存在的补丁激活安全性和可靠性隐患,因此,本发明实施例方法可以保证多线程条件下软件在线补丁激活的安全性和可靠性,且不会中断业务。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其它的附图。
图1为现有技术中的补丁激活原理示意图;
图2为现有技术中的临界区示意图;
图3a为本发明实施例的通信系统的一种结构示意图;
图3b为本发明实施例的通信系统的局部逻辑示意图;
图4为本发明实施例的在线补丁的制作与管理示意图;
图5为本发明实施例的一种软件在线补丁激活方法的流程示意图;
图6为本发明实施例的另一种软件在线补丁激活方法的流程示意图;
图7为本发明具体实施例中的软件在线补丁激活方法的原理示意图;
图8为图6中S201的一种预留中间区的方法流程示意图;
图9为一种传统的应用程序的编译过程的原理示意图;
图10为图6中S201的又一种预留中间区的方法流程示意图;
图11为图10中S2022的一种具体流程示意图;
图12为本发明实施例的在汇编文件中插入中间区的前后对比效果示意图;
图13为本发明实施例的一种补丁管理装置的结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
请参阅图3a和3b,为本发明实施例的通信系统的结构示意图,本发明实施例通信系统支持多线程环境下的软件在线补丁的激活,需要说明的是,图3a中包括三个CPU(CPU11,12,13),所述CPU通过总线20访问内存30,应当理解的是,本发明实施例的通信系统中可以包括一个CPU,即单CPU的通信系统,也可以包括多个CPU,即多CPU(多核)的通信系统。即本发明实施例的通信系统,包括至少一个CPU和内存,所述CPU上运行有操作系统,所述操作系统之上运行有至少一种应用程序(亦称为软件),所述应用程序关联有补丁管理线程和至少一个业务线程,需要说明的是,这里的补丁管理线程可以是待打补丁程序内部的线程,也可以是独立于所有待打补丁程序之外的线程,其中:
所述内存中载入有包含至少一个待打补丁函数的应用程序和包含补丁函数的补丁文件,其中,所述待打补丁函数的入口位置前或后具有能放置至少一条长跳转指令的存储空间;这里的存储空间,例如可以是函数入口位置(亦可称为函数起始位置)前或后的128字节内,具体可以是函数入口位置前的六个字节。
所述补丁管理线程,用于在所述应用程序的运行过程中,定位所述补丁函数的地址和所述待打补丁函数的入口地址,并在所述存储空间写入用于跳转到所述补丁函数的长跳转指令,以及将所述待打补丁函数入口位置处的指令修改为用于跳转到所述存储空间的短跳转指令;所述业务线程,用于执行到待打补丁函数入口位置处的短跳转指令,跳转到所述存储空间,通过所述存储空间中指令的执行跳转到所述补丁函数执行,从而实现在线补丁生效。
为了下文描述方便,这里将待打补丁函数入口位置处被修改为短跳转指令的原指令称作指令A。
在一种实现方式下,所述补丁管理线程具体用于在所述应用程序的运行过程中,定位所述补丁函数的地址和所述待打补丁函数的入口地址,在所述存储空间写入用于跳转到所述补丁函数的长跳转指令,或者,在所述存储空间写入处于指令A前的操作指令的反操作指令和用于跳转到所述补丁函数的长跳转指令,以及将待打补丁函数入口位置处的长度大于或等于两字节的指令A修改为用于跳转到所述存储空间的短跳转指令;
具体的,如果所述指令A为待打补丁函数入口位置处的首条指令,且长度大于或等于两字节,则在所述存储空间写入用于跳转到所述补丁函数的长跳转指令;或者,如果所述指令A为待打补丁函数入口位置处的非首条指令,且长度大于或等于两字节,则在所述存储空间写入处于指令A前的操作指令的反操作指令和用于跳转到所述补丁函数的长跳转指令。
在一种具体实现方式下,所述补丁管理线程具体用于在所述应用程序的运行过程中,定位所述补丁函数的地址和所述待打补丁函数的入口地址,并在所述存储空间写入出栈指令pop和用于跳转到所述补丁函数的长跳转指令,以及将待打补丁函数入口位置的入栈指令push之后的move指令修改为用于跳转到所述存储空间的短跳转指令。
本发明的一种实施例中,本发明实施例的通信系统进一步包括:编译器(图中未示意出),用于在对待打补丁程序进行编译时,在所述待打补丁程序的每个函数入口位置前或后预留能放置至少一条长跳转指令的存储空间,这里的处于待打补丁函数的入口位置前或后,且能放置至少一条长跳转指令的存储空间可以被称作中间区。
在一种具体实现方式下,所述编译器具体用于:根据控制所述存储空间的预留及所述存储空间的大小的编译选项,编译待打补丁的程序相关的函数生成汇编指令时,在输出函数的汇编函数名之前,输出所述编译选项指定字节数的初始指令以预留能放置至少一条长跳转指令的存储空间(中间区)。
在另一种具体实现方式下,所述编译器具体用于:将待打补丁程序的源文件编译生成汇编文件后,查找所述汇编文件中表示函数的关键字字符串,并在找到的表示函数的关键字字符串所指示的函数入口位置的前或后,插入指定字节数的初始指令以预留能放置至少一条长跳转指令的存储空间(中间区);对插入有前述初始指令的汇编文件重新编译生成新的汇编文件,并将新的汇编文件生成目标文件,由多个目标文件链接生成待打补丁程序的可执行文件;其中,所述指定字节数表示所述存储空间(中间区)的大小。
本发明的另一种实施例下,本发明实施例的通信系统中,所述操作系统之上进一步运行有编译程序,所述编译程序用于在对待打补丁程序进行编译时,在所述待打补丁程序的每个函数入口位置前或后预留能放置至少一条长跳转指令的存储空间。所述编译程序所涉及的具体工作过程,可以参考前述编译器揭露的相关内容,在此不再赘述。
需要说明的是,这里的补丁管理线程和至少一个业务线程可以属于同一个进程,即补丁操作能在单进程内完成;这样,单进程的所有线程能共享访问用户态存储区(即进程空间),在单进程内,补丁管理线程将长跳转指令写入待打补丁函数入口位置前或后且能放置至少一条长跳转指令的存储空间(中间区),以及待打补丁函数入口位置处的指令修改为跳转到所述存储空间的短跳转指令。
另一种实现下,这里的补丁管理线程和所述至少一个业务线程也可以分别属于不同的进程,例如:补丁管理线程属于进程A,所述至少一个业务线程属于进程B。
需要说明的是,任务是代码运行的一个映象,从系统的角度看,任务是竞争系统资源的最小运行单元。任务可以使用或等待CPU、I/O设备及内存空间等系统资源,并独立于其它任务,与它们一起并发运行。在Linux和Win32系统下,任务对应线程(thread)的概念。
应当理解的是,本发明实施例通信系统具体可以是Linux X86系统,或者,Linux X64系统,也可以是Solaris、aix等类Unix系统等等。例如,在Linux X86系统下,包括至少一个x86架构的CPU,CPU上运行有Linux操作系统,所述Linux操作系统之上运行有至少一种应用程序(亦称为软件),所述应用程序关联有补丁管理线程和至少一个业务线程(具体功能同上,故不再赘述)。
可见,本发明实施例通过在待打补丁程序的函数入口位置前或后的存储空间写入跳转到所述补丁函数的长跳转指令,以及将待打补丁函数入口位置处的指令修改为跳转到所述存储空间(中间区)的短跳转指令,补丁激活时通过该中间区中指令的执行进行跳转使补丁生效,由于修改函数入口位置处的指令的操作是原子操作,即修改前的指令和修改后的指令的指令长度相同,因而仅修改一条指令即可,无需覆盖临界区其它指令,从而避免了现有技术中对应用软件在线补丁激活时,因系统采用复杂指令集,跳转指令会覆盖函数入口的多条指令,而导致多线程调度机制下所存在的补丁激活安全性和可靠性隐患(即某线程执行到临界区(即待打补丁的函数入口处的指令区域)处时刚好发生线程切换的情况,若此时激活在线补丁,该线程切换回来后由于原函数的临界区已被新的跳转指令覆盖,程序便会发生异常;或者,有线程处理完信号处理函数后返回(信号的返回地址在临界区内)时,由于临界区已被跳转指令覆盖,导致程序出错),因此,本发明实施例方法可以保证多线程条件下软件在线补丁激活的安全性和可靠性,且不会中断业务。
请参阅图4,为本发明实施例在线补丁的制作与管理示意图,如图4所示,补丁制作过程为:在线补丁在后台使用补丁工具制作完毕后,补丁源代码被编译成目标文件,并通过补丁制作工具将待打补丁程序的符号文件(绝对或相对定位形式)和补丁程序的目标文件制作生成在线补丁文件。
补丁管理过程为:读取上述在线补丁文件(亦称为热补丁文件)到内存,加载补丁到补丁区,并激活生效。
下面结合附图来详细描述本发明实施例:
请参阅图5,为本发明实施例的一种在线补丁激活方法的流程示意图,该方法可以应用于包括至少一个CPU和内存的通信系统,所述CPU上运行有操作系统,所述操作系统之上运行有至少一种应用程序(亦称为软件),所述应用程序关联有补丁管理线程和至少一个业务线程,具体的,该方法的执行主体可以是待打补丁程序关联的补丁管理线程,其中该方法可以包括:
S101、定位补丁函数的地址和待打补丁函数的入口地址;
具体的,在待打补丁程序的运行过程中,定位所述补丁函数的地址和所述待打补丁函数的入口地址,其中,具体的是,从内存中的数组中读取补丁函数地址信息;
需要说明的是,如图4所示,如果补丁文件中的补丁函数地址信息是绝对地址,在加载补丁的过程中,直接将补丁文件中包含的补丁函数地址信息存入内存中分配好的数组中;
如果补丁文件中的补丁函数地址信息是相对地址(非绝对地址),在加载补丁的过程中,根据补丁函数的相对地址计算得到补丁函数的绝对地址,并将计算结果存入内存中分配好的数组中。
S102、基于所述补丁函数的地址和所述待打补丁函数的入口地址,在中间区写入用于跳转到所述补丁函数的长跳转指令,其中所述中间区为处于待打补丁函数入口位置前或后,且能放置至少一条长跳转指令的存储空间;
这里的存储空间(中间区)例如可以是待打补丁函数入口位置(亦可称为函数起始位置)前或后的128字节内,具体可以是函数入口位置前的六个字节。
S103、将待打补丁函数入口位置处的指令修改为跳转到所述中间区的短跳转指令,使得所述短跳转指令被执行后,跳转到所述中间区,通过中间区中指令的执行跳转到补丁函数执行,从而实现在线补丁生效。
为了下文描述方便,这里将待打补丁函数入口位置处被修改为短跳转指令的原指令称作指令A。
在一种实现方式下,指令A为待打补丁函数入口位置处的首条指令,且长度大于或等于两字节。
在另一种实现方式下,指令A为待打补丁函数入口位置处的非首条指令,且长度大于或等于两字节,则S102中所述在中间区写入用于跳转到所述补丁函数的长跳转指令的步骤具体可以为:在所述中间区写入处于指令A前的操作指令的反操作指令和用于跳转到所述补丁函数的长跳转指令。
本发明的一种具体实施例中,指令A为将待打补丁函数入口位置处的入栈指令push之后的指令(即第二条指令),所述处于指令A前的操作指令push的反操作指令为出栈指令pop;相应的,在所述中间区写入出栈pop指令和用于跳转到所述补丁函数的长跳转指令;将待打补丁函数入口位置处的入栈指令push之后的指令(即第二条指令)修改为跳转到所述中间区的短跳转指令。
其中,可以在待打补丁的程序编译时在所述程序的每个函数入口位置前或后预留中间区,在一种实现方式下,通过如下方法在所有待打补丁函数入口位置前或后预留中间区,具体包括如下步骤:
根据控制所述中间区的预留及所述中间区的大小的编译选项,编译待打补丁程序的函数生成汇编指令时,在输出函数的汇编函数名之前,输出所述编译选项指定字节数的初始指令以预留中间区。应当理解的是,这里的初始指令是用于预先占用存储空间的,相应的,在中间区写入用于跳转到所述补丁函数的长跳转指令即将存储空间中原有的初始指令修改为长跳转指令(和反操作指令)。
在另一种实现方式下,通过如下方法在所有待打补丁函数入口位置前或后预留中间区,具体包括如下步骤:
将待打补丁程序的源文件编译生成汇编文件后,查找所述汇编文件中表示函数的关键字字符串;
在找到的表示函数的关键字字符串所指示的函数入口位置的前或后,插入指定字节数的初始指令以预留中间区;其中,所述指定字节数表示所述中间区的大小;
对插入有所述初始指令的汇编文件重新编译生成新的汇编文件,并将新的汇编文件编译生成目标文件,由多个目标文件链接生成待打补丁程序的可执行文件。
可见,本发明实施例通过在待打补丁程序的函数入口位置前或后的存储空间写入跳转到所述补丁函数的长跳转指令,以及将待打补丁函数入口位置处的指令修改为跳转到所述存储空间(中间区)的短跳转指令,补丁激活时通过该中间区中指令的执行进行跳转使补丁生效,由于修改函数入口位置处的指令的操作是原子操作,即修改前的指令和修改后的指令的指令长度相同,因而仅修改一条指令即可,无需覆盖临界区其它指令,从而避免了现有技术中对应用软件在线补丁激活时,因系统采用复杂指令集,跳转指令会覆盖函数入口的多条指令,而导致多线程调度机制下所存在的补丁激活安全性和可靠性隐患(即某线程执行到临界区(即待打补丁的函数入口处的指令区域)处时刚好发生线程切换的情况,若此时激活在线补丁,该线程切换回来后由于原函数的临界区已被新的跳转指令覆盖,程序便会发生异常;或者,有线程处理完信号处理函数后返回(信号的返回地址在临界区内)时,由于临界区已被跳转指令覆盖,导致程序出错),因此,本发明实施例方法可以保证多线程条件下软件在线补丁激活的安全性和可靠性,且不会中断业务。
请参阅图6,为本发明实施例的另一种在线补丁激活方法的流程示意图,该方法可以应用于包括至少一个CPU和内存的通信系统,所述CPU上运行有操作系统,所述操作系统之上运行有至少一种应用程序(亦称为软件),所述应用程序关联有补丁管理线程和至少一个业务线程,具体的,该方法的执行主体可以是待打补丁程序关联的补丁管理线程,其中该方法可以包括:
S201、在一应用程序编译时,在所述应用程序的每个函数入口位置前或后预留中间区;
较优的,在函数入口位置前预留中间区,以保证使用短跳转short jmp指令能够跳转到中间区。如图7所示,在本发明具体实施例中,所述中间区处于待打补丁函数入口位置前,且占用六个字节(相对跳转指令)。如果使用绝对跳转指令或者是应用于x86-64位系统,则预留中间区的地址空间应相应扩大。
S202、当该应用程序需要在线打补丁时,在该应用程序的运行过程中加载包括补丁函数的补丁文件到所述内存中,并将补丁函数地址信息存入内存;
具体是,将补丁文件中包含的补丁函数地址信息存入内存中的数组或经计算后存入内存中的数组;
S203、当触发补丁激活的事件发生时,基于所述待打补丁函数的入口地址和从内存中读取的补丁函数地址信息,在中间区写入待打补丁函数入口位置处的push指令的反操作指令pop指令(即出栈指令,占用1个字节)和用于跳转到相应补丁函数的长跳转指令long jmp;
如图7所示,在本发明具体实施例中,这里的长跳转指令long jmp可以是5字节的相对跳转指令,或者占用更多字节的绝对跳转指令。
如图7所示,在本发明具体实施例中,写入中间区的指令为一个pop指令和一个long jmp指令。在另一种实现方式下,写入中间区的指令也可以是一个push指令,两个pop指令和一个long jmp指令;同理,在又一种实现方式下,写入中间区的指令也可以是两个push指令,三个pop指令和一个longjmp指令;应当理解的是,中间区中包含的pop指令的个数与临界区中包含的push指令和中间区中包含的push指令的个数之和相等,换言之,即总的入栈指令和总的出栈指令个数相当。
S204、将待打补丁函数入口位置处的push指令(即入栈指令)之后的指令修改为用于跳转到该中间区的短跳转指令short jump指令(其占用2字节),使得所述short jump指令被执行后跳转到所述中间区,通过中间区中指令的执行跳转到补丁函数执行,从而实现在线补丁的激活/生效。
需要说明的是,在又一种实现方式下,如果待打补丁函数的入口位置处待修改为短跳转指令的原指令为待打补丁函数的入口位置处的首条指令且指令长度大于或等于2个字节,则S203中可以在中间区写入用于跳转到补丁函数的长跳转指令long jmp即可。
如图7所示,在本发明具体实施例中,将待打补丁函数入口位置处的push指令之后的move指令修改为用于跳转到所述中间区的短跳转指令short jump指令,修改前的move指令与修改后的short jmp指令均占用2字节,指令长度相同,这里的move指令即待打补丁函数入口位置处的第二条指令。由于修改待打补丁函数入口位置处的第二条指令的操作是原子操作,本发明实施例方法可以保证在线补丁生效的安全性和可靠性。
可见,本发明实施例通过在待打补丁程序的函数入口位置前或后预留中间区,并在所述预留的中间区写入跳转到所述补丁函数的长跳转指令,以及将待打补丁函数入口位置的push指令之后的指令即第二条指令修改为跳转到所述中间区的短跳转指令,补丁激活时通过该中间区进行跳转使补丁生效,由于修改函数入口位置的第二条指令的操作是原子操作,即修改前的指令和修改后的指令的指令长度相同,因而仅修改一条指令即可,无需覆盖临界区其它指令,从而避免了现有技术中对应用软件在线补丁激活时,因系统采用复杂指令集,跳转指令会覆盖函数入口的多条指令,而导致多线程调度机制下所存在的补丁激活安全性和可靠性隐患(即某线程执行到临界区处时刚好发生线程切换的情况,若此时激活在线补丁,该线程切换回来后由于原函数的临界区已被新的跳转指令覆盖,程序便会发生异常;或者,有线程处理完信号处理函数后返回(信号的返回地址在临界区内)时,由于临界区已被跳转指令覆盖,导致程序出错),因此,本发明实施例方法可以保证多线程条件下软件在线补丁激活的安全性和可靠性,且不会中断业务。
请参阅图8,为本发明实施例的一种预留中间区的方法的流程示意图,支持在被打补丁的程序编译时在该程序的每个函数入口位置前或后预留中间区,其中该方法应用于使用开源编译器gcc的系统中,本发明实施例预留中间区的操作可以通过对编译器代码的修改实现,具体包括如下步骤:
S2011、在用于待打补丁程序编译的编译器的代码中添加编译选项,所述编译选项用于控制中间区的预留及中间区的大小;
S2012、根据所述编译选项,编译待打补丁程序的函数生成汇编指令时,在输出函数的汇编函数名之前,输出所述编译选项指定字节数的初始指令以预留中间区。
这里的初始指令,例如可以是全空null的空指令,或全0的指令。
相应的,图6中S203中在中间区写入pop指令和长跳转指令long jmp的步骤具体为:将初始指令修改为pop指令和长跳转指令long jmp。
需要说明的是,在开源编译器gcc的系统的一般版本中,可以在Varasm.c文件中的assemble_start_function中输出函数prefix到汇编文件的代码之前,增加向汇编文件输出所述编译选项指定字节数的初始指令的操作。
请参阅图9,为一种传统的应用程序的编译过程的原理示意图,如图9所示,传统的编译过程包括:通过编译器将源文件(.c文件)编译成目标文件(.o文件,即二进制文件),再将多个目标文件链接成可执行文件。
请参阅图10,为本发明实施例的又一种预留中间区的方法的流程示意图,支持在被打补丁的程序编译时在所有函数入口位置前或后预留中间区,本发明实施例预留中间区的操作可以通过修改编译过程中产生的汇编文件来实现中间区的预留。该方法不仅适用于使用开源编译器gcc编译的应用程序,而且适用于使用不开源的其它编译器编译的应用程序,其中该方法具体介绍在函数入口位置前预留中间区,包括如下步骤:
S2021、将待打补丁程序的源文件(.c文件)编译成汇编文件(.s文件);由于为现有技术,故这里不再赘述。
S2022、在所有函数入口位置前预留中间区:查找所述编译生成的汇编文件中表示函数的关键字字符串,并在找到的每个表示函数的关键字字符串所指示的函数入口位置前,插入指定字节数的初始指令以预留中间区;
这里的初始指令,例如可以是全空null的空指令,或全0的指令。这里以指定字节数来表示预留的中间区的大小。
S2023、对插入有所述初始指令的汇编文件重新编译生成新的汇编文件;由于为现有技术,故这里不再赘述。
S2024、将所述新的汇编文件编译生成目标文件;由于为现有技术,故这里不再赘述。
S2025、将多个目标文件链接生成待打补丁程序的可执行文件,由于为现有技术,故这里不再赘述。需要说明的是,这里生成的可执行文件即所有函数入口位置前已预留中间区的待打补丁程序。
其中,如图11所示,S2022中在函数入口位置前预留中间区的过程具体包括:
S2022a、设置中间区的大小和待插入的初始指令;这里中间区的大小,以指定字节数来表示。
如图12a、12b所示,本发明一种具体实施例中,这里的初始指令具体为全0的指令0×90。指定字节数具体为6个字节byte,其中图12a为在找到的函数入口位置前插入6个字节数的全0指令的操作前的示意图;图12b为在找到的函数入口位置前插入6个字节数的全0指令的操作后的示意图。
S2022b、在汇编文件中查找表示函数的关键字字符串,如果找到关键字字符串,则表示找到函数入口位置,转到S2022c;如果没有找到,则转到S2022d,结束对汇编文件的操作;
如图12所示,本发明一种具体实施例中,这里的表示函数的关键字字符串为function,如图12所示,查找到两处function。
S2022c、在找到的函数入口位置前插入指定字节数的初始指令,返回执行S2022b,继续查找下一处表示函数的关键字字符串,直到找到所有函数并在每个函数入口位置前插入指定字节数的初始指令。汇编文件中插入中间区的效果如图12所示,图12中对比表示了在找到的函数入口位置前插入6个字节数的全0指令的操作前后的示意图。
请参阅图13,为本发明实施例的一种补丁管理装置的结构示意图,需要说明的是,本发明实施例的补丁管理装置可以理解成前述的补丁管理线程,而本发明实施例涉及的补丁管理线程的表现形式可以是独立于各种应用程序之外的一种补丁管理程序,或者是待打补丁的应用程序内部的线程,如图13所示,本实施例的补丁管理装置包括:
地址定位单元301,用于在待打补丁应用程序的运行过程中,定位与该应用程序关联的补丁函数的地址和待打补丁函数的入口地址;
长跳转指令单元302,用于基于所述补丁函数的地址和所述待打补丁函数的入口地址,在中间区写入用于跳转到所述补丁函数的长跳转指令,其中所述中间区为处于待打补丁函数入口位置前或后,且能放置至少一条长跳转指令的存储空间;这里的存储空间(中间区)例如可以是待打补丁函数入口位置(亦可称为函数起始位置)前或后的128字节内,具体可以是函数入口位置前的六个字节。
短跳转指令单元303,用于将待打补丁函数入口位置处的指令修改为跳转到所述中间区的短跳转指令,使得所述短跳转指令被执行后,跳转到所述中间区,通过所述中间区中指令的执行跳转到所述补丁函数执行。
为了下文描述方便,这里将待打补丁函数入口位置处被修改为短跳转指令的原指令称作指令A。
在一种实现方式下,指令A为待打补丁函数入口位置处的首条指令,且长度大于或等于两字节。
在另一种实现方式下,指令A为待打补丁函数入口位置处的非首条指令,且长度大于或等于两字节,相应的,长跳转指令单元302具体用于基于所述补丁函数的地址和所述待打补丁函数的入口地址,在中间区写入处于待修改指令(即指令A)前的操作指令的反操作指令和用于跳转到所述补丁函数的长跳转指令,其中所述中间区为处于待打补丁函数入口位置前或后,且能放置至少一条长跳转指令的存储空间;
相应的,短跳转指令单元303具体用于将待打补丁函数入口位置处的长度大于或等于两字节的非首条指令修改为跳转到所述中间区的短跳转指令,使得所述短跳转指令被执行后,跳转到所述中间区,通过所述中间区指令的执行跳转到所述补丁函数执行。
具体地,本实施例中,所有单元所涉及的具体工作过程,可以参考上述在线补丁激活方法所涉及的相关实施例揭露的相关内容,在此不再赘述。
综上所述,本发明前述实施例通过在待打补丁程序的函数入口位置前或后预留中间区,并在所述预留的中间区写入跳转到所述补丁函数的长跳转指令,以及将待打补丁函数入口位置处的指令修改为跳转到所述中间区的短跳转指令,补丁激活时通过该中间区进行跳转使补丁生效,由于修改函数入口位置处的指令的操作是原子操作,即修改前的指令和修改后的指令的指令长度相同,因而仅修改一条指令即可,无需覆盖临界区其它指令,从而避免了现有技术中对应用软件在线补丁激活时,因系统采用复杂指令集,跳转指令会覆盖函数入口的多条指令,而导致多线程调度机制下所存在的补丁激活安全性和可靠性隐患(即某线程执行到临界区处时刚好发生线程切换的情况,若此时激活在线补丁,该线程切换回来后由于原函数的临界区已被新的跳转指令覆盖,程序便会发生异常;或者,有线程处理完信号处理函数后返回(信号的返回地址在临界区内)时,由于临界区已被跳转指令覆盖,导致程序出错),因此,本发明实施例方法可以保证多线程条件下,软件在线补丁激活的安全性和可靠性,且不会中断业务。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-OnlyMemory,ROM)或随机存储记忆体(Random Access Memory,RAM)等。
以上举较佳实施例,对本发明的目的、技术方案和优点进行了进一步详细说明,所应理解的是,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (7)

1.一种在线补丁激活方法,其特征在于,包括:
定位补丁函数的地址和待打补丁函数的入口地址;
基于所述补丁函数的地址和所述待打补丁函数的入口地址,在中间区写入用于跳转到所述补丁函数的长跳转指令,其中所述中间区为处于待打补丁函数入口位置前或后,且能放置至少一条长跳转指令的存储空间;
将待打补丁函数入口位置处的指令修改为跳转到所述中间区的短跳转指令,使得所述短跳转指令被执行后,跳转到所述中间区,通过所述中间区指令的执行跳转到所述补丁函数执行;
其中,在待打补丁程序编译时,在所述程序的每个函数入口位置前或后预留所述中间区;
根据控制所述中间区的预留及所述中间区的大小的编译选项,编译待打补丁程序的函数生成汇编指令时,在输出函数的汇编函数名之前,输出所述编译选项指定字节数的初始指令以预留中间区。
2.如权利要求1所述的在线补丁激活方法,其特征在于,被修改为短跳转指令的指令为待打补丁函数入口位置处的首条指令,且长度大于或等于两字节。
3.如权利要求1所述的在线补丁激活方法,其特征在于,被修改为短跳转指令的指令为待打补丁函数入口位置处的非首条指令,且长度大于或等于两字节,所述方法还包括:在所述中间区写入处于所述被修改指令前的操作指令的反操作指令。
4.如权利要求3所述的在线补丁激活方法,其特征在于,所述待打补丁函数入口位置处的非首条指令为入栈指令push之后的指令;
所述处于被修改指令前的操作指令的反操作指令为出栈指令pop。
5.如权利要求1至4任一项所述的在线补丁激活方法,其特征在于,所述在待打补丁程序编译时,在所述程序的每个函数入口位置前或后预留所述中间区的步骤,包括:
将待打补丁程序的源文件编译生成汇编文件后,查找所述汇编文件中表示函数的关键字字符串;
在找到的表示函数的关键字字符串所指示的函数入口位置的前或后,插入指定字节数的初始指令以预留中间区;其中,所述指定字节数表示所述中间区的大小;
对插入有所述初始指令的汇编文件重新编译生成新的汇编文件,并将新的汇编文件编译生成目标文件,由多个目标文件链接生成待打补丁程序的可执行文件。
6.一种补丁管理装置,其特征在于,所述装置包括:
地址定位单元,用于在待打补丁应用程序的运行过程中,定位与该应用程序关联的补丁函数的地址和待打补丁函数的入口地址;
长跳转指令单元,用于基于所述补丁函数的地址和所述待打补丁函数的入口地址,在中间区写入用于跳转到所述补丁函数的长跳转指令,其中所述中间区为处于待打补丁函数入口位置前或后,且能放置至少一条长跳转指令的存储空间;
短跳转指令单元,用于将待打补丁函数入口位置处的指令修改为跳转到所述中间区的短跳转指令,使得所述短跳转指令被执行后,跳转到所述中间区,通过所述中间区中指令的执行跳转到所述补丁函数执行;
其中,在待打补丁程序编译时,在所述程序的每个函数入口位置前或后预留所述中间区;
根据控制所述中间区的预留及所述中间区的大小的编译选项,编译待打补丁程序的函数生成汇编指令时,在输出函数的汇编函数名之前,输出所述编译选项指定字节数的初始指令以预留中间区。
7.如权利要求6所述的装置,其特征在于,所述长跳转指令单元具体用于基于所述补丁函数的地址和所述待打补丁函数的入口地址,在中间区写入处于被修改指令前的操作指令的反操作指令和用于跳转到所述补丁函数的长跳转指令,其中所述中间区为处于待打补丁函数入口位置前或后,且能放置至少一条长跳转指令的存储空间;
所述短跳转指令单元具体用于将待打补丁函数入口位置处的长度大于或等于两字节的非首条指令修改为跳转到所述中间区的短跳转指令,使得所述短跳转指令被执行后,跳转到所述中间区,通过所述中间区指令的执行跳转到所述补丁函数执行。
CN2010101136462A 2010-02-11 2010-02-11 在线补丁的激活方法、装置及系统 Active CN102156661B (zh)

Priority Applications (5)

Application Number Priority Date Filing Date Title
CN2010101136462A CN102156661B (zh) 2010-02-11 2010-02-11 在线补丁的激活方法、装置及系统
CN201310157498.8A CN103218262B (zh) 2010-02-11 2010-02-11 在线补丁的激活方法、装置及系统
EP10845571.8A EP2434394B1 (en) 2010-02-11 2010-10-30 Method, device and system for activating on-line patch
PCT/CN2010/078271 WO2011097901A1 (zh) 2010-02-11 2010-10-30 在线补丁的激活方法、装置及系统
US13/336,227 US9075692B2 (en) 2010-02-11 2011-12-23 Method, device and system for activating on-line patch

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN2010101136462A CN102156661B (zh) 2010-02-11 2010-02-11 在线补丁的激活方法、装置及系统

Related Child Applications (1)

Application Number Title Priority Date Filing Date
CN201310157498.8A Division CN103218262B (zh) 2010-02-11 2010-02-11 在线补丁的激活方法、装置及系统

Publications (2)

Publication Number Publication Date
CN102156661A CN102156661A (zh) 2011-08-17
CN102156661B true CN102156661B (zh) 2013-06-12

Family

ID=44367208

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2010101136462A Active CN102156661B (zh) 2010-02-11 2010-02-11 在线补丁的激活方法、装置及系统

Country Status (4)

Country Link
US (1) US9075692B2 (zh)
EP (1) EP2434394B1 (zh)
CN (1) CN102156661B (zh)
WO (1) WO2011097901A1 (zh)

Families Citing this family (35)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8539469B2 (en) * 2004-05-11 2013-09-17 Microsoft Corporation Efficient patching
CN102156661B (zh) 2010-02-11 2013-06-12 华为技术有限公司 在线补丁的激活方法、装置及系统
CN102609241B (zh) * 2012-01-19 2018-04-27 中兴通讯股份有限公司 热补丁方法及装置
CN103294457B (zh) * 2012-02-27 2017-02-01 百度在线网络技术(北京)有限公司 动态替换主程序中c/c++函数的方法及装置
CN103309683B (zh) * 2012-03-07 2016-08-03 京信通信系统(中国)有限公司 硬件设备的软件补丁嵌入方法及装置
CN103399774A (zh) * 2013-07-29 2013-11-20 华为技术有限公司 链接方法及链接器及计算机系统
US10310863B1 (en) 2013-07-31 2019-06-04 Red Hat, Inc. Patching functions in use on a running computer system
CN103399775A (zh) * 2013-08-05 2013-11-20 北京华为数字技术有限公司 一种热补丁方法及设备
CN104424037B (zh) * 2013-08-29 2018-12-14 中兴通讯股份有限公司 一种动态补丁函数的方法及装置
CN106484369B (zh) * 2013-10-24 2019-11-29 华为技术有限公司 一种在线补丁激活的方法及装置
CN104461625A (zh) * 2014-12-04 2015-03-25 上海斐讯数据通信技术有限公司 一种热补丁实现方法和系统
US9841971B1 (en) * 2015-03-11 2017-12-12 Intuit, Inc. Embedding software updates into content retrieved by applications
CN104765634B (zh) * 2015-05-06 2017-12-08 中孚信息股份有限公司 一种Linux系统内核新功能增加方法
CN104809018B (zh) * 2015-05-18 2018-01-02 烽火通信科技股份有限公司 一种嵌入式系统软件注入热补丁的方法及系统
CN105138341A (zh) * 2015-09-24 2015-12-09 上海斐讯数据通信技术有限公司 基于MIPS架构和vxworks系统实现热补丁长跳转的方法
CN106874022B (zh) * 2015-12-11 2021-06-25 中兴通讯股份有限公司 一种热补丁注入方法及装置
CN105607937B (zh) * 2015-12-25 2019-01-18 京信通信系统(中国)有限公司 一种热补丁方法及设备
CN106775671A (zh) * 2016-11-30 2017-05-31 武汉虹信通信技术有限责任公司 一种用于通信系统linux环境中的热补丁修复方法
CN106610857B (zh) * 2016-12-23 2019-01-22 优刻得科技股份有限公司 一种热补丁信息查询方法以及装置
CN107357622B (zh) * 2017-07-17 2020-09-22 迈普通信技术股份有限公司 热补丁实现方法及通信设备
CN107943517A (zh) * 2017-10-26 2018-04-20 北京奇虎科技有限公司 终端应用的挂钩方法及装置
CN107943544B (zh) * 2017-12-11 2021-10-08 北京奇虎科技有限公司 一种内核补丁的加载方法及装置
US10698668B1 (en) * 2018-05-29 2020-06-30 Amazon Technologies, Inc. Custom code transformations during compilation process
US10649763B2 (en) * 2018-06-15 2020-05-12 Microsoft Technology Licensing, Llc Resource efficient deployment of multiple hot patches
JP7081805B2 (ja) * 2018-06-21 2022-06-07 日本電気通信システム株式会社 情報処理装置、ロードモジュール生成方法及びプログラム、並びに、動的プログラム更新システム及び方法
CN108874438B (zh) * 2018-06-25 2021-09-21 南京中感微电子有限公司 补丁生成方法、装置、电子设备及计算机存储介质
CN110673899B (zh) * 2018-07-03 2022-06-21 武汉斗鱼网络科技有限公司 一种程序处理方法及相关设备
CN111381905B (zh) * 2018-12-27 2023-07-18 北京华为数字技术有限公司 一种程序处理方法、装置及设备
CN109766145A (zh) * 2019-01-22 2019-05-17 杭州云缔盟科技有限公司 一种Windows下通过HOOK技术实现函数热补丁的方法
CN110225048B (zh) * 2019-06-19 2022-09-23 腾讯科技(成都)有限公司 数据传输方法、装置、第一终端及存储介质
CN110888667A (zh) * 2019-10-30 2020-03-17 北京军懋国兴科技股份有限公司 一种arm芯片程序在线重构的方法
CN110928570A (zh) * 2019-11-27 2020-03-27 北京知道创宇信息技术股份有限公司 一种固件升级的方法及装置、可读存储介质
CN112988182A (zh) * 2019-12-13 2021-06-18 中兴通讯股份有限公司 Linux内核热补丁实现方法、电子设备及计算机可读介质
WO2021142761A1 (zh) * 2020-01-17 2021-07-22 深圳市汇顶科技股份有限公司 为芯片打补丁的方法及芯片
CN115952491B (zh) * 2022-12-30 2023-09-29 北京基调网络股份有限公司 hook目标函数的方法、装置、电子设备及介质

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101004681A (zh) * 2006-12-22 2007-07-25 中兴通讯股份有限公司 嵌入式系统动态补丁长跳转的实现方法
CN101482834A (zh) * 2009-01-20 2009-07-15 华为技术有限公司 在线补丁激活方法、通信装置及系统

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE4434895C2 (de) * 1993-12-23 1998-12-24 Hewlett Packard Co Verfahren und Vorrichtung zur Behandlung von Ausnahmebedingungen
US5619698A (en) * 1995-05-05 1997-04-08 Apple Computer, Inc. Method and apparatus for patching operating systems
JP2004536405A (ja) * 2001-07-16 2004-12-02 ユキング レン 組み込みソフトウェア更新システム
CN1230744C (zh) 2002-08-16 2005-12-07 华为技术有限公司 一种嵌入式系统软件补丁的实现和控制方法
US7784044B2 (en) * 2002-12-02 2010-08-24 Microsoft Corporation Patching of in-use functions on a running computer system
US7886287B1 (en) * 2003-08-27 2011-02-08 Avaya Inc. Method and apparatus for hot updating of running processes
US20060015855A1 (en) * 2004-07-13 2006-01-19 Kumamoto Danny N Systems and methods for replacing NOP instructions in a first program with instructions of a second program
CN100370431C (zh) * 2004-08-16 2008-02-20 上海华为技术有限公司 对嵌入式系统进行在线监测的方法及其系统
US8381203B1 (en) * 2006-11-03 2013-02-19 Nvidia Corporation Insertion of multithreaded execution synchronization points in a software program
CN102156661B (zh) 2010-02-11 2013-06-12 华为技术有限公司 在线补丁的激活方法、装置及系统

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101004681A (zh) * 2006-12-22 2007-07-25 中兴通讯股份有限公司 嵌入式系统动态补丁长跳转的实现方法
CN101482834A (zh) * 2009-01-20 2009-07-15 华为技术有限公司 在线补丁激活方法、通信装置及系统

Also Published As

Publication number Publication date
EP2434394B1 (en) 2015-10-21
CN102156661A (zh) 2011-08-17
WO2011097901A1 (zh) 2011-08-18
EP2434394A4 (en) 2012-05-02
EP2434394A1 (en) 2012-03-28
US9075692B2 (en) 2015-07-07
US20120102476A1 (en) 2012-04-26

Similar Documents

Publication Publication Date Title
CN102156661B (zh) 在线补丁的激活方法、装置及系统
CN103218262A (zh) 在线补丁的激活方法、装置及系统
US6223340B1 (en) Method for directly inlining virtual calls without on-stack replacement
EP1114366B1 (en) Accurate method for inlining virtual calls
US20130019231A1 (en) Distributed compiling process with instruction signature support
US9378008B2 (en) Method and system for creating, applying, and removing a software fix
EP0633526B1 (en) Language processing system and method therefor
EA012057B1 (ru) Определение области действия параметра графа зависимостей
JPH01166141A (ja) デバッグ情報提供方法
CN101243412B (zh) 用于安全检查模块中的可执行应用程序的系统和方法
CN104820586A (zh) 一种航天器嵌入式软件在轨维护方法
US20060282828A1 (en) Handling caught exceptions
US8612951B2 (en) Method of determining which computer program functions are changed by an arbitrary source code modification
CN105354045A (zh) 补丁的制作方法及装置、补丁的激活方法及装置
CN101763273B (zh) 一种在嵌入式系统的扩展存储器中动态装入代码的方法
US7269828B2 (en) Method for safely instrumenting large binary code
CN107357622B (zh) 热补丁实现方法及通信设备
CN100507843C (zh) 一种动态编程方法
CN106020812B (zh) 一种针对dsp平台航天器软件的动态在轨维护方法
US8423974B2 (en) System and method for call replacement
CN107479920A (zh) 一种单elf文件实现多操作系统加载的方法
CN104461566B (zh) 一种基于对象实例的行为变体的jcop扩展实现方法
JPH07152551A (ja) コンピュータシステムおよびプログラム実行方法
WO2022269793A1 (ja) 制御装置、及び、アドレス管理方法
CN114035920A (zh) 一种dsp程序对称加载运行的方法及其装置

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant