CN1230744C - 一种嵌入式系统软件补丁的实现和控制方法 - Google Patents

一种嵌入式系统软件补丁的实现和控制方法 Download PDF

Info

Publication number
CN1230744C
CN1230744C CNB021257663A CN02125766A CN1230744C CN 1230744 C CN1230744 C CN 1230744C CN B021257663 A CNB021257663 A CN B021257663A CN 02125766 A CN02125766 A CN 02125766A CN 1230744 C CN1230744 C CN 1230744C
Authority
CN
China
Prior art keywords
patch
function
file
address
target file
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.)
Expired - Lifetime
Application number
CNB021257663A
Other languages
English (en)
Other versions
CN1475909A (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 CNB021257663A priority Critical patent/CN1230744C/zh
Publication of CN1475909A publication Critical patent/CN1475909A/zh
Application granted granted Critical
Publication of CN1230744C publication Critical patent/CN1230744C/zh
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Images

Landscapes

  • Stored Programmes (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明公开了一种嵌入式系统软件补丁的实现和控制的方法。该发明分为两大步骤执行:1)单独的补丁制作工具分析补丁目标文件的符号段,从中得到包含被补丁函数和去补丁函数地址替换关系的函数替换表,并将补丁目标文件的代码段和数据段提取出来,连同函数替换表以补丁单元的形式生成补丁文件;2)补丁控制部分加载补丁文件到希望被补丁修改程序的缓冲区中,并根据补丁文件中的函数替换表构造函数跳转指令,将被补丁函数地址上的第一条指令替换为跳转到去补丁函数起始地址的函数跳转指令,使CPU执行到被补丁函数时,跳转到去补丁函数地址,执行去补丁函数。该方法实现了在不中断程序的条件下,用补丁对程序进行修改。

Description

一种嵌入式系统软件补丁的实现和控制方法
技术领域
本发明涉及一种用软件补丁修改程序的方法,尤指在嵌入式系统中,在不中断程序执行的情况下,用补丁修改程序的方法。
背景技术
当前社会,计算机软件得到了越来越广泛的应用,由于软件使用人数的增多,使得对软件的功能要求和界面要求日渐增强,这就导致了软件规模的扩大和复杂度的增加。在这种情况下,软件的错误将在所难免,人们将很难得到一个零错误的软件。为了修改软件中的错误,当前通常使用发布新软件的方法或者使用软件补丁的形式。所谓软件补丁,就是制作一个小的文件,利用这个文件,用户采用简单的步骤就可以完成对错误程序的修改。错误程序(希望被补丁修改的程序)在诸如硬盘或FLASH的辅助存储设备中,以文件的形式存放,在这个文件中有一个符号段,以表的形式存放了程序中的所有的全局符号信息,根据文件格式规定的方式可以从该文件中读出希望被补丁修改的程序中所有的全局符号的信息,包括名字和加载后在内存中的地址,其中,全局符号包括定义在希望被补丁修改的程序文件中的全局函数和全局变量。
在嵌入式系统中,被执行的只是可执行文件,即程序。而从操作系统的角度看,系统中有多个任务在运行,即多个线程在运行。系统通过多个任务共同运行完成业务功能。例如在交换机中,就存在用于接受用户的配置的任务,用于电话连接的任务,用于话单处理的任务等多个任务。在电信级的应用中,嵌入式系统被广泛应用。在对嵌入式系统最初的应用中,如果程序中出现错误,系统必须中断程序,替换掉出现错误的可执行文件,然后系统再重新运行。但是在电信级的应用中,要求程序长时间不中断地执行,因此就要求在修正程序错误的同时不能中断程序。所以就有必要采用一种不中断程序的补丁技术。
在现有技术中,存在一种软件补丁技术,这种软件补丁技术是针对可以动态加载和链接文件的系统的。在此种技术中,程序由一个可执行文件和多个可被动态加载和链接的文件组成。典型的可被动态加载和链接的文件是Windows系统的DLL文件(动态链接库文件)。在可被动态加载和链接的文件中的函数没有被实际引用之前,该文件不会被加载到系统中,一旦该文件中的函数被引用到,系统的加载程序将加载该文件,并取出该文件中的代码段和数据段进行加载并完成其中符号的定位。现有软件补丁技术生成一个新的可被动态加载和链接的文件,以此文件替换原有文件。这种现有技术虽然实现起来简单,但是由于需要通过文件替换的方法来实现补丁,因此会中断程序的执行。
在现有技术中,还存在另一种软件补丁和控制技术,这种软件补丁技术是针对支持检查点(CheckPoint)技术的系统的。应用这种补丁技术的典型是使用UNIx操作系统的平台。检查点技术所采用的方法是:定期将一个正在执行程序的状态存储在一个稳定的存储器中,在发生故障后,系统可以从该状态进行恢复。这种软件补丁技术同时融合了补丁控制技术,此种技术利用在系统中维护的一个替换需求管理表(Replacement Request ManagingTable),当定期的检查点到来时,系统将检查该表,当该检查点与一个去补丁的程序要求的检查点相匹配时,系统将控制转向执行去补丁的程序。但是该技术在实际的控制转移的时候,系统会被中断较长的时间,因此会中断程序的执行。
在现有技术中,还存在一种软件补丁控制技术,该技术针对含多个可选安装项的程序。许多程序包含多个功能组件,安装时用户可选择其中的组件组合。这样对该程序进行补丁修改时,针对不同组件的补丁以及同一组件不同版本的补丁会有多个补丁文件,该技术提供了友好的人机界面帮助用户管理这些补丁文件,但是,由于该技术针对的情况定制性强,使得该技术缺乏应用的广泛性。
发明内容
有鉴于此,本发明的主要目的在于提供一种嵌入式系统软件补丁的实现和控制方法,能够在不中断程序的条件下,用补丁对程序进行修改,并且,在补丁实现和控制的过程中,可以保证系统安全性。
为达到上述目的,实现本发明需要以下步骤:
a.单独的补丁制作工具分析补丁目标文件的符号段,将去补丁函数的地址和被补丁函数的地址替换关系记录在函数替换表中;
b.单独的补丁制作工具将补丁目标文件的代码段和数据段提取出来,连同函数替换表一起生成新补丁文件的每一个补丁单元;
c.优先级低于业务处理任务的补丁控制任务将新补丁文件中各个补丁单元的代码段和数据段顺序拷贝到补丁区;
d.优先级低于业务处理任务的补丁控制任务根据各个补丁单元内的函数替换表分别构造各个补丁单元的函数跳转指令,并将各个被补丁函数地址上的第一条指令替换为跳转到去补丁函数起始地址的函数跳转指令,当CPU执行被补丁函数时,跳转到补丁区的相应位置,执行相应的去补丁函数。
其中,步骤a中所述的补丁目标文件的生成包括:系统有错误后,由文本编辑器写成补丁源文件,编译器将补丁源文件处理生成补丁目标文件。
其中,步骤a中所述分析补丁目标文件的符号段进一步包括:
在补丁目标文件的符号段中,当一个符号信息中的全局函数名字与全局符号表中的一个全局函数名字相同时,单独的补丁制作工具将补丁目标文件中的该全局函数确定为去补丁函数,将希望被补丁修改的程序文件中的该全局函数确定为被补丁函数;
在补丁目标文件的符号段中,当一个符号信息中的全局变量名字与全局符号表中的全局变量名字相同,且该全局变量已经初始化时,补丁制作工具失败退出。
其中,在步骤a中,所述的被补丁函数的地址从全局符号表中得到。
其中,在该方法中,所述的全局符号表的生成进一步包括:
单独的补丁制作工具创建全局符号表,从符号表文件或者希望被补丁修改的程序文件中读取希望被补丁修改的程序文件中的全局函数和全局变量的名字和它们加载后在内存中的地址,将这些信息拷贝到全局符号表中。
其中,在步骤a中,所述的去补丁函数的地址的获得方法包括:单独的补丁制作工具将补丁目标文件中的代码段和数据段的地址顺序确定在补丁区的空白部分。
其中,在所述步骤a和b之间,该方法进一步包括:当补丁目标文件所引用的外部函数已经定义时,单独的补丁制作工具通过处理补丁目标文件的重定位段重新确定补丁目标文件所引用的外部符号加载后在内存中的地址,外部符号包括全局变量和外部函数,否则,单独的补丁制作工具失败退出。
其中,在该方法中,所述的处理补丁目标文件的重定位段包括:单独的补丁制作工具从补丁目标文件的重定位段中取得重定位类型和重定位位置。
其中,在步骤b中所述的新补丁文件的生成进一步包括:
补丁制作工具对补丁文件的内容用循环冗余校验的算法得到一个校验值,将此校验值和用户输入的版本信息放入新补丁文件中。
其中,在步骤c中所述的拷贝进一步包括:补丁控制任务将新补丁文件加载到希望被补丁修改程序的缓冲区中,从缓冲区进行拷贝。
其中,在步骤c中所述的拷贝进一步包括:当新补丁文件中的版本信息与补丁控制任务中预先设置的版本信息一致时,执行拷贝。
其中,在步骤c中所述的拷贝进一步包括:补丁控制任务对新补丁文件进行循环冗余校验计算,当计算结果与新补丁文件中保存的结果相同时,执行拷贝。
其中,在步骤d中,所述的构造函数跳转指令进一步包括:补丁控制任务根据补丁单元内的函数替换表得到该补丁单元中的去补丁函数和被补丁函数的地址,根据这两个函数的地址关系并结合函数跳转操作符JMP或JMP TO,补丁控制任务构造得到函数跳转指令。
其中,在步骤d中,在进行所述替换之前,补丁控制任务保存被补丁函数指令,当不希望补丁发挥作用时,补丁控制任务直接恢复保存的被补丁函数指令。
可见,本发明提供了单独的补丁制作工具和在希望被补丁修改的程序中运行的补丁控制部分,其中,单独的补丁制作工具通过分析补丁目标文件的符号段得到包含去补丁函数和被补丁函数地址信息的函数替换表,将补丁目标文件的代码段和数据段提取出来,即将去补丁函数提取出来,连同函数替换表以补丁单元的形式生成补丁文件;补丁控制部分在希望被补丁修改的程序中运行,负责根据补丁文件中的函数替换表构造函数跳转指令并进行指令替换,使得在CPU执行被补丁函数时跳转到去补丁函数的地址,执行去补丁函数。此种方法实现了在不中断程序运行的条件下,用补丁对程序进行修改。同时,本发明还有如下优点:补丁控制任务提供对补丁文件的安全性和完整性检查,保证了系统的安全;使用指令替换的方式对函数进行补丁修改,执行被修改的函数时响应时间快,不会影响到系统其它函数的执行;设定补丁控制任务的优先级低于程序中的业务处理任务,实现了在不中断程序中业务处理任务的条件下对程序进行补丁修改。
附图说明
图1是用补丁修改程序的完整过程的流程示意图。
图2是补丁制作工具处理的整个过程的流程图。
图3是补丁控制任务加载补丁文件的整个过程的流程图。
图4是补丁控制任务使补丁发挥作用的整个过程的流程图。
图5是希望被补丁修改的程序文件的格式示意图。
图6是补丁文件的格式示意图。
具体实施方式
下面结合附图对本发明进行详细描述。
以下为一个本发明实际应用的具体实例:
参见图1,图1给出了此实例完成补丁修改程序的完整过程的示意图,要完成补丁修改程序的目的,本实例需要以下的步骤:
(1)步骤11:系统发现程序中的错误后,利用文本编辑器生成补丁源文件(本实例中为c文件)topatch.c;
(2)步骤12:补丁源文件topatch.c经过编译器处理后,生成补丁目标文件(本实例中为obj文件)topatch.obj,补丁目标文件的文件格式参见图5;
(3)步骤13:单独的补丁制作工具处理补丁目标文件topatch.obj的符号段和重定位段,然后,将得到的函数替换表和经过处理的补丁目标文件的代码段和数据段以补丁单元的形式生成补丁文件;
(4)步骤14:补丁控制任务完成对补丁文件的加载和控制;
下面对步骤13进行详细说明。图2给出了在此实例中补丁制作工具处理的相关过程,其中,虚线箭头代表数据流,实线箭头代表控制流。此实例要实现补丁制作工具的功能,包括以下几个步骤:
(1)步骤21:补丁制作工具读取符号表文件28,从该文件中得到定义在希望被补丁修改的程序文件中的全局函数和全局变量的名字和它们加载后在内存中的地址,补丁制作工具根据这些信息创建全局符号表,将这些信息,即全局函数和全局变量的名字和它们加载后在内存中的地址拷贝到全局符号表中,以备进行后续的步骤;
其中,希望被补丁修改的程序文件的格式如图5所示,包括文件头、代码段、数据段、由N1个符号信息组成的符号段、由N2个重定位信息组成重定位段和段表,其中,代码段以二进制的形式存放指令;数据段中根据数据是否只读以及是否初始化,分类存储数据;符号段中以符号为单位存放该文件中定义的各个全局函数和全局变量的名字以及它们加载后在内存中的地址;在重定位段中以重定位信息为单位存放引用外部符号“名字”以及“在何处引用”等信息;文件头对段表进行索引,段表中包括代码段的段头、数据段的段头、重定位段的段头以及符号段的段头,这些段头与其相应的段相互对应;在图中深色部分代表可能不存在的段,当重定位段不存在时,重定位段的段头也不存在;
(2)步骤22:补丁目标文件29(本实例中为topatch.obj)作为补丁制作工具的一个数据输入,补丁目标文件的格式与如图5所示希望被补丁修改的程序文件相同,补丁制作工具分析补丁目标文件29的符号段:当该文件符号段中某一符号信息的全局函数与全局符号表中的该符号信息中的全局函数名字一致时,则将补丁目标文件中的该全局函数定义为去补丁函数,将全局符号表中的该全局函数定义为被补丁函数,补丁制作工具将去补丁函数的地址与被补丁函数的地址登记在函数替换表中;
其中,去补丁函数地址的获得方法为:补丁制作工具将补丁目标文件的代码段和数据段的地址确定在系统预留补丁区,即确定去补丁函数加载后在内存中的地址为补丁区的地址;被补丁函数的地址从全局符号表中获得;
在步骤22中获得了函数替换表,得到了去补丁函数和被补丁函数的地址替换关系;
(3)步骤23:判断是否补丁目标文件符号段中的全局变量和全局符号表中的全局变量出现名字一致且该全局变量已经初始化,或者补丁目标文件中引用的外部函数未定义,如果不是,则进行步骤24,处理补丁目标文件的重定位段;否则,补丁制作工具失败退出,此步骤表明本发明不支持变量替换;
(4)步骤24:补丁制作工具处理补丁目标文件的重定位段,得到重定位类型和重定位位置,根据每个重定位要求重新确定补丁目标文件中引用的外部符号加载后在内存中的地址,外部符号包括外部函数和全局变量;
其中,如图5所示,重定位段以重定位信息为单元保存在补丁目标文件中,其中包括补丁目标文件引用的外部符号的名字和引用地址;
其中,重定位类型遵循ABI(应用软件二进制接口)标准,保存处理外部符号的方式;
(5)步骤25:补丁制作工具将经过对符号段和重定位段处理过的补丁目标文件中的代码段和数据段,即去补丁函数的实际指令提取出来,连同函数替换表一起,以补丁单元的形式生成补丁文件;
参见图6,图6为补丁文件的格式示意图,该文件的文件头索引相应的补丁单元头,每一个补丁单元头对应相应的补丁单元;在一个补丁单元中,存放有这个补丁的代码段、数据段和函数替换表,其中,代码段和数据段存放的是去补丁函数的实际指令,当补丁文件被加载进入希望被补丁修改的程序中后,代码段和数据段将被拷贝到系统预留的补丁区;函数替换表中包括被补丁函数的地址和去补丁函数的地址,其中,去补丁函数的地址即为补丁区的地址;同时,在补丁文件中,还包括校验信息(CRC),在校验信息中,进一步包括版本信息;
(6)步骤26:补丁制作工具将版本信息放置在生成的补丁文件中;补丁制作工具对补丁文件的内容用循环冗余校验的算法得到校验值,将此校验值放入补丁文件中,生成新补丁文件27;
下面对图1所示的步骤14进行详细说明,要实现步骤14,本实例包括以下两个部分:
(1)第一部分,补丁文件的加载:
参见图3所示,图3给出了补丁控制任务加载补丁文件的整个过程的流程图。由于补丁控制任务的优先级低于业务处理的优先级,补丁控制任务只有在业务处理的任务等待资源的时候才会被执行,以此实现在不中断业务处理任务的条件下,用补丁对程序进行修改;要完成补丁的加载,本实例包括以下步骤:
a.步骤31:补丁控制任务处理输入,输入的内容为:要求从指定位置加载步骤27中的新补丁文件;
b.步骤32:补丁控制任务加载步骤27中的新补丁文件到希望被补丁修改的程序的缓冲区内;
c.步骤33:补丁控制任务对缓冲区内的补丁文件的内容进行CRC计算(循环冗余校验计算),当计算结果与补丁文件中保存的记录一致时,完整性检查通过,补丁控制任务执行步骤34;否则,补丁控制任务执行步骤36提示用户错误;
d.步骤34:补丁控制任务将补丁文件中的版本信息与补丁控制任务中预先设置的版本信息进行比较,当二者一致时,安全性检查通过,执行步骤35;否则,执行步骤36提示用户错误;
e.步骤35:补丁控制任务从新补丁文件中提取代码段和数据段,从缓冲区拷贝到程序预留的补丁区中,即将去补丁函数指令拷贝到补丁区;其中,代码段和数据段以图6所示的格式存放在补丁文件中;
图6为补丁文件通用的格式示意图,补丁以单元的形式存放,每一个补丁单元包括代码段、数据段和函数替换表三部分,其中代码段和数据段中存放去补丁函数的指令,函数替换表中存放去补丁函数的地址和被补丁函数的地址;补丁文件的文件头对补丁单元头进行索引,每个补丁单元头与其补丁单元相对应;在补丁文件中,还包括校验信息。
(2)第二部分,补丁控制任务使补丁发挥作用:
参见图4所示,图4给出了本实例中补丁控制任务使补丁发挥作用的整个过程的流程图,以Intel x86为例,要完成使补丁发挥作用,本实例包括以下步骤:
a.步骤41:补丁控制任务处理输入,输入的内容为:要求使补丁发挥作用;
b.步骤42:补丁控制任务根据从如图6所示的函数替换表中读出的去补丁函数的地址和被补丁函数的地址,利用跳转指令操作符构造跳转指令;参见表1,在本实例中,被补丁函数func1的地址为0x300080,去补丁函数func1′的地址为0x1600000,跳转指令操作符为JMP TO,构造得到的跳转指令为:JMP 0x12fff7b,以二进制的方式表示为:0xe9 0x7b 0xff 0x2f 0x01,结合CPU的解释,这条跳转指令表示CPU将从0x1600000处读取指令;
c.步骤43:补丁控制任务保存被替换的指令,参见表1,本实例中,被替换的指令为位于地址0x300080处的指令,二进制的存放形式为0x56,汇编码的形式为PUSH EBP;
d.步骤44:补丁控制任务从如图6所示的补丁文件的函数替换表中读出被补丁函数的地址0x300080,参见表1,补丁控制任务将0x300080处的第一条指令0x56替换为步骤42中得到的跳转指令0xe9 0x7b 0xff 0x2f 0x01,完成指令替换,当CPU调用被补丁函数时,跳转到去补丁函数入口,执行去补丁函数。其中,在进行所述替换之前,补丁控制任务保存被补丁函数指令,当不希望补丁发挥作用时,补丁控制任务直接恢复保存的被补丁函数指令。
                              表1
未进行指令替换的被补丁函数func1 内存地址  地址处内容 内容对应的汇编码
0x300080  0x56 PUSH EBP
0x300081  0x8b 0xec MOV EBP,ESP
0x300083  …
进行指令替换后的被补丁函数func1: 内存地址  地址处内容 内容对应的汇编码
0x300080  0xe9 0x7b 0xff0x2f 0x01 JMP 0x12fff7b
0x300085  …
去补丁函数func1′ 内存地址  地址处内容 内容对应的汇编码
0x1600000  0x56 PUSH EBP
0x1600001  0x8b 0xec MOV EBP,ESP
可见,如上实例的关键在于通过单独的补丁制作工具分析补丁目标文件的符号段,得到包含去补丁函数和被补丁函数地址替换关系的函数替换表,并将该表置于补丁文件的相应补丁单元中,补丁控制任务根据补丁文件中的函数替换表构造函数跳转指令,并将函数替换表中被补丁函数地址上第一条指令替换为跳转到去补丁函数起始地址的函数跳转指令,在CPU执行该被补丁函数时,跳转到函数替换表中去补丁函数的地址,执行该去补丁函数。以此实现了在不中断程序的情况下对程序进行修改;同时,此实例的补丁控制任务提供补丁的安全性和完整性检查,有利于系统安全。

Claims (14)

1.一种嵌入式系统软件补丁的实现和控制方法,其特征在于该方法至少包括以下步骤:
a.单独的补丁制作工具分析补丁目标文件的符号段,将去补丁函数的地址和被补丁函数的地址替换关系记录在函数替换表中;
b.单独的补丁制作工具将补丁目标文件的代码段和数据段提取出来,连同函数替换表一起生成新补丁文件的每一个补丁单元;
c.优先级低于业务处理任务的补丁控制任务将新补丁文件中各个补丁单元的代码段和数据段顺序拷贝到补丁区;
d.优先级低于业务处理任务的补丁控制任务根据各个补丁单元内的函数替换表分别构造各个补丁单元的函数跳转指令,并将各个被补丁函数地址上的第一条指令替换为跳转到去补丁函数起始地址的函数跳转指令,当CPU执行被补丁函数时,跳转到补丁区的相应位置,执行相应的去补丁函数。
2.根据权利要求1所述的方法,其特征在于步骤a中所述的补丁目标文件的生成包括:系统有错误后,由文本编辑器写成补丁源文件,编译器将补丁源文件处理生成补丁目标文件。
3.根据权利要求1所述的方法,其特征在于在步骤a中所述分析补丁目标文件的符号段进一步包括:
在补丁目标文件的符号段中,当一个符号信息中的全局函数名字与全局符号表中的一个全局函数名字相同时,单独的补丁制作工具将补丁目标文件中的该全局函数确定为去补丁函数,将希望被补丁修改的程序文件中的该全局函数确定为被补丁函数;
在补丁目标文件的符号段中,当一个符号信息中的全局变量名字与全局符号表中的全局变量名字相同,且该全局变量已经初始化时,补丁制作工具失败退出。
4.根据权利要求1所述的方法,其特征在于在步骤a中,所述的被补丁函数的地址从全局符号表中得到。
5.根据权利要求3或4所述的方法,其特征在于所述的全局符号表的生成进一步包括:
单独的补丁制作工具创建全局符号表,从符号表文件或者希望被补丁修改的程序文件中读取希望被补丁修改的程序文件中的全局函数和全局变量的名字和它们加载后在内存中的地址,将这些信息拷贝到全局符号表中。
6.根据权利要求1所述的方法,其特征在于在步骤a中,所述的去补丁函数的地址的获得方法包括:单独的补丁制作工具将补丁目标文件中的代码段和数据段的地址顺序确定在补丁区的空白部分。
7.根据权利要求1所述的方法,其特征在于在所述步骤a和b之间,该方法进一步包括:当补丁目标文件所引用的外部函数已经定义时,单独的补丁制作工具通过处理补丁目标文件的重定位段重新确定补丁目标文件所引用的外部符号加载后在内存中的地址,外部符号包括全局变量和外部函数,否则,单独的补丁制作工具失败退出。
8.根据权利要求7所述的方法,其特征在于所述的处理补丁目标文件的重定位段包括:单独的补丁制作工具从补丁目标文件的重定位段中取得重定位类型和重定位位置。
9.根据权利要求1所述的方法,其特征在于在步骤b中所述的新补丁文件的生成进一步包括:
补丁制作工具对补丁文件的内容用循环冗余校验的算法得到一个校验值,将此校验值和用户输入的版本信息放入新补丁文件中。
10.根据权利要求1所述的方法,其特征在于在步骤c中,所述的拷贝进一步包括:补丁控制任务将新补丁文件加载到希望被补丁修改程序的缓冲区中,从缓冲区进行拷贝。
11.根据权利要求1所述的方法,其特征在于在步骤c中所述的拷贝进一步包括:当新补丁文件中的版本信息与补丁控制任务中预先设置的版本信息一致时,执行拷贝。
12.根据权利要求1所述的方法,其特征在于在步骤c中所述的拷贝进一步包括:补丁控制任务对新补丁文件进行循环冗余校验计算,当计算结果与新补丁文件中保存的结果相同时,执行拷贝。
13.根据权利要求1所述的方法,其特征在于在步骤d中,所述的构造函数跳转指令包括:补丁控制任务根据补丁单元内的函数替换表得到该补丁单元中的去补丁函数和被补丁函数的地址,根据这两个函数的地址关系并结合函数跳转操作符JMP或JMP TO,补丁控制任务构造得到函数跳转指令。
14.根据权利要求1所述的方法,其特征在于在步骤d中,在进行所述替换之前,补丁控制任务保存被补丁函数指令,当不希望补丁发挥作用时,补丁控制任务直接恢复保存的被补丁函数指令。
CNB021257663A 2002-08-16 2002-08-16 一种嵌入式系统软件补丁的实现和控制方法 Expired - Lifetime CN1230744C (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CNB021257663A CN1230744C (zh) 2002-08-16 2002-08-16 一种嵌入式系统软件补丁的实现和控制方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CNB021257663A CN1230744C (zh) 2002-08-16 2002-08-16 一种嵌入式系统软件补丁的实现和控制方法

Publications (2)

Publication Number Publication Date
CN1475909A CN1475909A (zh) 2004-02-18
CN1230744C true CN1230744C (zh) 2005-12-07

Family

ID=34143046

Family Applications (1)

Application Number Title Priority Date Filing Date
CNB021257663A Expired - Lifetime CN1230744C (zh) 2002-08-16 2002-08-16 一种嵌入式系统软件补丁的实现和控制方法

Country Status (1)

Country Link
CN (1) CN1230744C (zh)

Families Citing this family (46)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN100370431C (zh) * 2004-08-16 2008-02-20 上海华为技术有限公司 对嵌入式系统进行在线监测的方法及其系统
US7945958B2 (en) 2005-06-07 2011-05-17 Vmware, Inc. Constraint injection system for immunizing software programs against vulnerabilities and attacks
WO2007094052A1 (ja) * 2006-02-14 2007-08-23 Fujitsu Limited パッチ適用装置およびプログラム
CN100432931C (zh) * 2006-12-22 2008-11-12 中兴通讯股份有限公司 嵌入式系统动态补丁长跳转的实现方法
EP2159732A1 (en) 2008-08-21 2010-03-03 Thomson Licensing Method and device for code obfuscation
CN101482834B (zh) * 2009-01-20 2012-02-22 华为技术有限公司 在线补丁激活方法、通信装置及系统
CN101799763B (zh) * 2009-02-10 2013-01-30 华为技术有限公司 内核在线补丁的方法、装置和系统
CN101561764B (zh) * 2009-05-18 2012-05-23 华为技术有限公司 一种多核环境下的补丁方法与补丁装置
CN101937340B (zh) * 2009-06-29 2014-11-05 中兴通讯股份有限公司 使用补丁对软件进行动态升级与控制的方法和装置
CN102156661B (zh) 2010-02-11 2013-06-12 华为技术有限公司 在线补丁的激活方法、装置及系统
CN101963911B (zh) * 2010-09-29 2015-12-16 用友网络科技股份有限公司 补丁生成方法和装置
CN102063634B (zh) * 2010-12-24 2013-04-24 北京握奇数据系统有限公司 一种掩膜智能卡的功能扩展方法及智能卡
WO2012145916A1 (zh) 2011-04-29 2012-11-01 北京中天安泰信息科技有限公司 数据安全存储方法及装置
JP2014515858A (ja) * 2011-04-29 2014-07-03 北京中天安泰信息科技有限公司 実行中の命令を再結合する方法および装置
WO2012145915A1 (zh) 2011-04-29 2012-11-01 北京中天安泰信息科技有限公司 数据安全读取方法及装置
CN102819439B (zh) * 2011-06-10 2017-09-29 中兴通讯股份有限公司 一种基于重定位的多制式应用程序的动态加载方法和装置
US9052983B2 (en) * 2012-01-16 2015-06-09 International Business Machines Corporation Source code patches
CN102609241B (zh) * 2012-01-19 2018-04-27 中兴通讯股份有限公司 热补丁方法及装置
CN103246528A (zh) * 2012-02-10 2013-08-14 中兴通讯股份有限公司 软件升级方法和装置
CN103294457B (zh) * 2012-02-27 2017-02-01 百度在线网络技术(北京)有限公司 动态替换主程序中c/c++函数的方法及装置
CN102722387B (zh) * 2012-05-29 2015-07-08 华为技术有限公司 动态打补丁的方法和装置
CN103679042B (zh) * 2012-09-06 2016-09-14 中天安泰(北京)信息技术有限公司 数据安全存储方法及装置
CN103679040B (zh) * 2012-09-06 2016-09-14 中天安泰(北京)信息技术有限公司 数据安全读取方法及装置
CN103679041B (zh) * 2012-09-06 2016-11-23 中天安泰(北京)信息技术有限公司 数据安全读取方法及装置
CN103729601B (zh) * 2012-10-11 2016-08-03 中天安泰(北京)信息技术有限公司 数据安全互联系统及数据安全互联系统建立方法
US9342285B2 (en) 2012-11-30 2016-05-17 Huawei Technologies Co., Ltd. Method and apparatus for detecting code change
CN103077062B (zh) * 2012-11-30 2016-08-03 华为技术有限公司 一种代码改动的检测方法和装置
CN104239082B (zh) * 2013-06-20 2019-01-15 上海博达数据通信有限公司 嵌入式系统的热补丁实现方法
CN103744709B (zh) * 2014-01-23 2017-02-15 华为技术有限公司 补丁加载方法及装置
CN103942073B (zh) * 2014-04-08 2017-12-01 北京奇虎科技有限公司 实现系统热补丁的方法及装置
CN103885808A (zh) * 2014-04-08 2014-06-25 北京奇虎科技有限公司 热补丁处理方法及装置
CN103984585A (zh) * 2014-06-06 2014-08-13 浪潮电子信息产业股份有限公司 一种Linux内核可热插拨内核模块运行时升级方法
CN105354045A (zh) * 2014-08-21 2016-02-24 中兴通讯股份有限公司 补丁的制作方法及装置、补丁的激活方法及装置
CN105653244B (zh) * 2014-11-10 2019-04-19 华为数字技术(苏州)有限公司 一种软件优化方法及装置
CN105573788B (zh) * 2015-12-15 2019-02-26 华为技术有限公司 补丁处理的方法和设备以及生成补丁的方法和设备
CN107451474B (zh) * 2016-05-31 2020-06-26 百度在线网络技术(北京)有限公司 用于终端的软件漏洞修复方法和装置
CN108052345B (zh) * 2017-10-13 2021-07-20 宁波三星医疗电气股份有限公司 一种嵌入式软件多版本程序的共存方法
CN108932407B (zh) * 2018-05-22 2022-01-25 北京奇虎科技有限公司 一种程序安全保护方法及装置
CN109840105A (zh) * 2018-12-24 2019-06-04 苏州蜗牛数字科技股份有限公司 一种不停服的热更新方法
CN111381905B (zh) * 2018-12-27 2023-07-18 北京华为数字技术有限公司 一种程序处理方法、装置及设备
CN109491698B (zh) * 2018-12-29 2022-07-08 武汉思普崚技术有限公司 基于热补丁的系统更新方法及装置
CN111930412A (zh) * 2019-05-13 2020-11-13 阿里巴巴集团控股有限公司 差分文件生成及固件在线升级的方法和装置
CN110928570A (zh) * 2019-11-27 2020-03-27 北京知道创宇信息技术股份有限公司 一种固件升级的方法及装置、可读存储介质
EP4012554B1 (en) * 2020-01-17 2023-10-18 Shenzhen Goodix Technology Co., Ltd. Chip patching method and chip
CN114021146B (zh) * 2021-11-15 2022-07-05 杭州戎戍网络安全技术有限公司 一种基于值集分析的非结构化差异补丁分析方法
CN114385525A (zh) * 2021-12-08 2022-04-22 航天信息股份有限公司 一种并发访问usb设备的方法及系统

Also Published As

Publication number Publication date
CN1475909A (zh) 2004-02-18

Similar Documents

Publication Publication Date Title
CN1230744C (zh) 一种嵌入式系统软件补丁的实现和控制方法
CN1113291C (zh) 自动配置生成
CN1296835C (zh) 用于控制计算机系统的引导操作的装置和方法
US7774636B2 (en) Method and system for kernel panic recovery
CN1251074C (zh) 计算机的重启动方法
US7353507B2 (en) Intercepting function cells
CN1500243A (zh) 使用可移动存储器收集和恢复用户环境数据
US7900202B2 (en) Identification of software execution data
CN1797342A (zh) 用于增量式封包部署的设备和方法
CN101038549A (zh) 一种可跨系统的软件升级方法
CN1766883A (zh) 基于秘密模式来切换要访问的文件夹的方法及计算机系统
US8788799B2 (en) Server computer, computer system, and file management method
CN1728106A (zh) 一种应用程序故障的定位方法
US20010047512A1 (en) Method and system for linking multiple processors having shared memory
CN1367895A (zh) 把不同源语言转移到一个执行介质
CN1920787A (zh) 信息处理设备及其控制程序和控制方法
CN102147734B (zh) 运行时类提取的方法和系统
CN1975693A (zh) 具有自驱动功能的指令仿真解析系统及其实现方法
CN1329309A (zh) 操作系统的多语言用户接口
US6742180B1 (en) System and method providing seamless transition of operating system environment
CN111352631B (zh) 一种接口兼容性检测方法及装置
CN1920786A (zh) 实现操作系统安全控制的系统及方法
CN1916851A (zh) 进行软件应用的时间优化的替换
CN1841329A (zh) 对目标文件进行定位的方法和装置
CN1858718A (zh) 一种使用软件补丁修改微码程序的方法

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
CX01 Expiry of patent term

Granted publication date: 20051207

CX01 Expiry of patent term