CN100474248C - 用于通过数据传输更新计算机程序的方法和数据处理设备 - Google Patents
用于通过数据传输更新计算机程序的方法和数据处理设备 Download PDFInfo
- Publication number
- CN100474248C CN100474248C CNB2005800067034A CN200580006703A CN100474248C CN 100474248 C CN100474248 C CN 100474248C CN B2005800067034 A CNB2005800067034 A CN B2005800067034A CN 200580006703 A CN200580006703 A CN 200580006703A CN 100474248 C CN100474248 C CN 100474248C
- Authority
- CN
- China
- Prior art keywords
- program
- version
- data
- program part
- address
- 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 - Fee Related
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/60—Software deployment
- G06F8/65—Updates
- G06F8/658—Incremental updates; Differential updates
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
- Information Transfer Between Computers (AREA)
- Computer And Data Communications (AREA)
Abstract
本发明涉及一种差值压缩方法,该方法特别被应用于计算机程序的更新,尤其能够在窄带的数据传输路径中使用。用于创建异态数据的本发明的方法不仅识别完全一致的程序区,而且还识别这样的程序区,即在该程序区中,被参考的存储地址根据相对于旧程序版本的相同的程序部分的移动的位置而改变。该相对于相同的程序部分的识别以位移指令和存取指令中被参考的存储地址的解释为基础。仅仅新添加的程序区以及用于各个程序部分的地址数据作为异态数据来传输。因此,异态数据所需要的存储容量极大地降低。在更新旧程序版本时,新的存储地址对于移动的程序部分来明确地计算,并且插入到新的要建立的程序版本中。
Description
技术领域
本发明涉及一种用于在需更新的计算机程序的旧程序版本与计算机程序的新程序版本之间创建异态数据的方法,以及一种用于利用异态数据来更新计算机程序的旧程序版本的方法。本发明进一步涉及一种用于创建和发送异态数据的数据处理设备,以及用于接收与处理异态数据的数据处理设备。
背景技术
在数据处理装置中,通常计算机程序的旧版本,不管是整个操作系统或者仅仅一部分的应用软件,完全通过新版本来替换,也就是说,新的程序文件以相同的文件名覆盖旧的程序文件。假如移动数据处理设备,如移动电话或者在机动车中安装的设备必须更新时,目前新程序版本根据使用者的需求传输给各自的设备。其可以这样地实现,即这些设备通过电缆与数据服务器连接,然后新程序版本通过该数据连接安装到移动设备中,或者在交换式数据载体,如CD或者DVD上的新程序版本被提供使用。另一方面,数据服务器本身可以通过数据远程连接,例如像互联网连接或者无线连接获得程序版本。在每种类型的数据传输中要考虑到的是,或许可以仅在合适的时间里传输相对有限的数据量,或者高数据传输率或许会带来高额的数据传输费用,因此,人们尝试将要发送的数据保持尽可能地小。然而,该目标与当今的操作系统或应用程序的日益增加的复杂性相矛盾。
在特定的工业领域中,例如像在软件开发或者在数据库的维护中,这又是必要的,即旧程序版本与新程序版本长时间共同保存,以使得例如可以恢复改变,或者在出现问题时,旧程序版本可以再次重新使用。因为这会导致提供用于使用的存储空间的瓶颈,所以开发了新的算法,该算法算出旧程序版本与新程序版本的偏差,并由此创建了带有异态数据的文件。此外,异态数据用于在展示旧程序版本时,自动生成新程序版本。旧程序版本和明显小于新程序版本的异态数据文件被保存。用于创建异态数据的算法也被称为差值压缩算法。
在该算法中,主要区别两个等级:通过复制和粘贴生成新程序版本的算法等级,以及使用粘贴和删除操作的算法等级。
在复制和粘贴时,在旧的和新程序版本中搜索最大可能一致的区域。剩余的区域被作为新的要粘贴的区域。新的要粘贴的区域以及关于一致的以及新的区域的定位或者相互的排列的数据作为异态数据来存储。然后,复制粘贴算法可以在需要时从旧版本中生成新程序版本,该算法从旧程序版本中复制出一致区域,并且利用新区域设置对应的定位信息并相互排列。由此,完全重新建立了新的版本。
在粘贴和删除时,同样搜索最大可能一致的区域。然而,异态数据信息不包含完全要粘贴的区域,而是彼此有差别的区域被详细地检查其区别,并且创建一个剪辑稿,利用该剪辑稿,彼此有差别的区域的旧版本与新版本进行匹配。由此,粘贴删除算法生成新程序版本,该算法基于剪辑稿在旧程序版本中进行相应的改变。新添加的部分被粘贴,并且省略的部分被删除。新版本相应地通过对旧版本的处理来生成。
一种公开的复制粘贴算法是Xdelta算法,该算法附属于GNU通用公共许可证。该算法在今天已经利用异态数据应用在移动终端设备的计算机程序的更新中,因为异态数据文件与利用通常方法压缩的程序文件本身相比需要明显更小的存储空间和传输带宽。用于更新的计算机程序以其为目标处理器编译的二进制的形式存在。算法将旧的和新程序版本的二进制程序代码互相比较,搜索最大可能的一致的区域,并标记其位置,也就是其程序地址。剩余的区域作为要粘贴的区域添加到异态数据中。
发明内容
本发明的目的是,提出一种用于创建异态数据的方法,和一种用于创建和发送异态数据的数据处理设备,其中,异态数据所需要的存储空间应该被进一步地降低。本发明的另一个目的是,找到一种利用该异态数据更新计算机程序的旧程序版本的方法和一种用于接收和处理该异态数据的数据处理设备。
该目的通过本发明提出的方法或者设备来实现。本发明的一个方面提出一种用于在要更新的计算机程序的旧程序版本和计算机程序的新程序版本之间产生异态数据的方法,其中,新程序版本可以由异态数据和旧程序版本生成,旧程序版本和新程序版本的二进制程序代码互相比较,该程序代码由指令字构成,并且,相同的程序部分被确定,该相同的程序部分不仅存在于旧程序版本中而且还存在于新程序版本中,并且相同的程序部分包括至少一个指令字,以及复制地址数据作为异态数据的第一部分存储,该复制地址数据确定在旧程序版本内部的和在新程序版本内部的相同的程序部分的定位,其包括以下步骤:确定由绝对相同的指令字的保持不变的序列的旧程序版本和新程序版本的二进制程序代码以及由包括有地址参考的指令字组合而成的相同的程序部分,该地址参考参照另一个绝对相同的指令字;对作为新的程序部分的不相同的以及其余的不变的包括在新程序版本的程序代码中的程序部分归类;存储新的程序部分,并且由粘贴地址数据和修正数据修正地址参考,粘贴地址数据确定在新程序版本的程序代码内部的新的程序部分的定位,其中,新的程序部分、粘贴地址数据以及修正数据构成异态数据的第二部分。本发明的另一方面提出一种用于利用在计算机程序的旧程序版本的二进制程序代码和新程序版本的二进制程序代码之间的异态数据对计算机程序的旧程序版本进行更新的方法,其中二进制程序代码由指令字构成,异态数据至少包括复制地址数据、新的程序部分以及粘贴地址数据,复制地址数据确定在旧程序版本和新程序版本的内部的相同的程序部分的定位,相同的程序部分由完全相同的指令字的保持不变的序列的旧程序版本和新程序版本的二进制程序代码以及包括有地址参考的指令字构成,地址参考参照另一个完全相同的指令字,新的程序部分为所有不相同的和其余不变的包括在新程序版本的程序代码中的程序部分,通过粘贴地址数据确定在新程序版本的二进制程序代码的内部的定位,该方法包括以下步骤:从旧程序版本中复制出相同的程序部分,并且利用复制地址数据在新程序版本中定位相同的程序部分,利用粘贴地址数据在新程序版本中粘贴新的程序部分,利用属于异态数据的修正数据,在相同的程序部分中确定新的地址参考,并且修正地址参考。本发明的又一方面提出一种用于创建和传输异态数据的数据处理设备,其具有:计算单元,该计算单元更新旧程序版本;与计算单元连接的系统内存,用于数据的缓冲存储;与计算单元连接的非临时数据存储器,用于存储旧程序版本、新程序版本以及异态数据;与计算单元连接的通信接口,用于构成到至少另一个预备接收的数据处理设备的数据连接,并且用于到至少另一个数据处理设备的异态数据的数据传输。本发明的最后一个方面提出一种用于接收和处理异态数据的数据处理设备,其具有:计算单元,该计算单元更新旧程序版本;与计算单元连接的通信接口,用于构成到另一个预备发送的数据处理设备的数据连接,并且用于从另一个数据处理设备接收异态数据;与所述计算单元连接的非临时数据存储器,用于存储旧程序版本、新程序版本以及异态数据;与计算单元连接的系统内存,用于数据的缓冲存储。
本发明的基础是识别,因为例如粘贴新的程序部分,所以在计算机程序的新程序版本部分的内部,如各个功能或功能块,经常仅仅相对于旧版本改变位置。在转换的二进制程序代码中,由此而引起多个通过程序指令访问的存储地址的变化,因此,程序分支的转移范围或者变量或者常量数据的存储位置发生改变。首先,被访问的存储地址以二进制程序代码的形式描述计算机指令的运算域,特别是转移指令的运算域。同时,转移指令用于函数的分支,以及包括作为存储地址的该函数的所属相对或绝对程序地址。此外,被访问的存储地址可以作为绝对存储地址而存储在程序中,该存储地址利用间接的存取指令存取。绝对存储地址再次参照数据,例如变量或者常量值。利用间接的存取指令,数据通过双重的基准从存储器中读取或者写入到存储器中。
接下来,通过程序指令访问的存储地址短暂地作为地址参考来描述。
已经公开的Xdelta算法识别转移的程序部分为不一致的部分,在该程序部分中,地址参考发生变化,因此,该算法不用逻辑地并且不用从内容上来检测代码,而是直接地作一对一的比较。借此,只发现一致的程序部分,该部分具有完全相同的指令顺序。
然而,本发明考虑的基础是,即基本可行性在于,地址参考以及其变化自动地识别,其中程序代码被解释并且不用进行字符对字符的检测。在源代码转换为二进制代码时,地址参考的计算一直由链接和定位的标准化过程执行。如果由多个源文件构成的源代码被转换,那么,首先源文件被单独地编译并且由此创建所谓的目标文件。接下来,连接器将单独的目标文件结合成一个目标文件,并且将地址参量导入到一个位置上,变量或者函数在该位置被调入,因此,该变量和函数的最终位置在程序中相对于链接的时间点是未知的。如果连接器将所有的地址参量放置在确定的位置上,那么定位器通过对应的绝对或者相对程序地址代替地址参量。定位器一直在一个程序的内部和相同的程序内部重新计算程序部分的地址参考。
本发明以此为出发点,即在更新旧程序版本时,改变的地址参考可以通过新程序版本自动计算,因此,在旧程序版本中以及在新程序版本中的所有程序部分的位置被获悉。新的绝对或者相对地址参考可以详尽地由用于生成异态数据的方法检测,并且对应于异态数据,从而在更新旧版本的程序部分时,可以对应地修改地址参考。仅仅必须改变地址参考的程序部分被作为新的程序部分归入,并且不作为异态数据存储,这明显降低了异态数据的存储空间的需求。
在本发明的一个优选的实施例中,异态数据被进一步减少,其中,新的地址参考不对应于异态数据。因为用于更新异态数据的算法同样知道旧的和新程序版本,所以该算法同样如用于创建异态数据的算法一样有能力详尽地计算新的地址参考,并且在新程序版本中修改。
为了计算地址被改变的地址参考,必须要了解,即在旧程序版本中的哪些程序部分对应于在新程序版本中的哪些程序部分。这些保持相同的程序部分(除了被改变的地址参考)必须被识别为是互相合适的,为此,用于创建异态数据的本发明的方法在内容上检测新的和旧程序版本的二进制代码。
二进制代码由指令字的序列组成,其长度通过应用的处理器确定,并且可由处理器直接解读。指令字也可以是计算机指令,由操作标记、实际的指令部分以及可由一个或多个元素构成的运算域构成,或者是直接以二进制代码形式存储的变量的值和绝对地址。
在计算机程序的内部改变的地址参考可以这样地识别,即计算机指令的操作标记的序列保持不变,并且仅仅转移指令或者存取指令的运算域改变,或者由保持不变的计算机指令访问变化的存储地址,例如被载入。
借此,根据本发明的算法不仅发现完全相同的程序部分,而且发现除了改变的地址参考之外完全相同的程序部分。所有的这些程序部分被整理为所谓的相同的程序部分,也就是在旧程序版本和新程序版本之间一致的程序部分。
从而,由多个独立的程序部分构成的由算法识别为未改变的程序范围相对于通常的差值压缩算法明显的变大。其余的被保留的新整理的程序部分相应地占用非常小的存储位置,因此,本发明可以特别地应用在用于更新计算机程序的情况中,在这些程序中,仅仅窄带的或者成本高昂的数据传输是可能的,例如像使用GSM移动电话时。
由算法存储的异态数据包括用于新的,如也用于相同的程序部分的程序地址数据的形式的至今所有新的程序部分以及位置信息,然而,其中相对于常规的算法的区别在于,很少的程序部分对应于新的以及用于传输的程序部分。
在本发明的一个优选的实施例中,算法在相同的、新程序版本上重复地检查程序版本。在第一步中,该算法挑选出完全相同的指令字的相关联的区域。此外,算法通过最大可能的相关联区域开始运算,并且然后运算到一个最小的值。受系统限制的最小值代表指令字的长度。在一个特别的设计方案中,相关联的区域的最小值可以也作为指令字的倍数而预先设定,从而,优化了异态数据创建的过程。
在第二步中,在其余保留的以及暂时作为新识别的程序部分中搜索相对相同的计算机指令,并且在相同的程序部分中搜索间接的存取指令。相对相同的计算机指令为具有作为运算域的地址参考的指令,并且其操作标记以及相对位置与相邻的相同的程序部分一致。然而,运算域的值在新程序版本中偏离于在旧程序版本中的值。相对相同的计算机指令作为下一个指令经常直接排列在相同的程序部分的尾部,或者插入到两个相同的程序部分之间。然而,这些指令也可以仅仅由新的程序部分包围。假如相对相同的计算机指令的运算域以及地址参考已经作为相同的程序部分归入的程序范围来参照,那么,利用相对相同的计算机指令将命令行分类为相同的程序部分。假如该命令行与另一个相同的程序部分相邻,那么该命令行对应于这个相同的程序部分。
属于相同的程序部分的间接存取指令参照指令字,指令字包括作为地址参考的绝对程序地址。如果指令字属于作为新归入的程序部分,并且包含在指令字中的绝对程序地址再一次参照相同的程序部分,那么指令字完全相同的程序地址同样作为相同的程序部分被分类。
接下来,第二步在一个时间内重复,直到找到具有参照相同的程序部分的地址参考的所有指令。
在另一个优选的实施例中,在异态数据的生成结束之后执行异态数据的验证。这由此实现,即根据异态数据以及旧程序版本来创建新程序版本,完全相同地发生在更新旧程序版本时(如:在移动终端设备上)。相同的程序部分从旧程序版本中复制出来,并且粘贴到新程序版本的对应的程序地址。地址数据也可以作为复制地址数据来表示。其或者描述开始点和对应的程序部分的长度,或者描述开始点和结束点。
除了相同的程序部分的位置之外,新的程序部分也获得异态数据,并且在相同的程序部分之间插入到新程序版本中。这在程序地址上实现,该程序地址通过所谓的粘贴地址数据来说明。随后,或者在程序部分的复制和粘贴时,在程序部分中查找地址参考,并且其被检测,即在旧程序版本中的地址参考参照了那些相同的程序部分。然后,对应于相同的程序部分的已知的新位置来修改地址参考。最后,新创建的程序版本与原始存在的新程序版本比较,并且假如确定没有偏差,那么异态数据可以作为正确的而被归入。
在验证的过程中,可以发现确定的错误,该错误取决于,在程序代码中包括数据的较长的语句,例如文本串,其以其二进制的形式与包括在旧程序版本中的一个或多个指令字一致。该数据的语句假如被作为相同的程序部分来不当地解释的话,那么会导致,即在验证期间创建的程序版本与本来的新程序版本不兼容。这些不当的解释在本发明的另一个设计方案中作为特别事件识别。作为可能的辅助,带有未解释的数据的指令字从相同的程序部分的组中删除,并且作为新的程序部分归入。在这样的情况中可以选择另一种可能性,在该情况中,数据的未解释的语句不仅存在于旧程序版本中还存在于新程序版本中。然后,该数据的位置存储在旧程序版本和新程序版本中,并且在识别标志下作为要复制的数据部分添加到异态数据中。在该方法中,相对于作为新的程序部分而归入的数据来创建较少的要传输的异态数据。
在异态数据的接受者一方,用于与生成方法相配合的评估方法必须被应用,从而可以从异态数据中以及旧程序版本中创建正确的新程序版本。这样的用于更新旧程序版本的本发明的方法,利用包括在异态数据中的复制地址数据而从旧程序版本中复制出相同的程序部分,并且在相应地在新程序版本中定位。新的程序部分利用粘贴地址数据粘贴到相同的程序部分之间。之后或者已经在相同的程序部分的复制或者在新程序版本的粘贴期间,所有的相对相同的计算机指令以及所有的间接存取指令从程序部分中一个接一个地查找出来、解释或者修正,也就是说其被评估,指令的地址参考在旧程序版本中参照那个相同的程序部分以及该程序部分的位置在新程序版本中改变了多少字符长度或者字节。由此创建的新的地址参考被对应地在新程序版本中注册。根据地址参考的类型,修正值或者作为位移来计算,并且因此将字节的对应的数量加到旧的相对存储地址上或者从其上减去,该修正值或者作为绝对位置以及的存储地址来确定。
根据本发明的用于异态数据的生成和传输的数据处理设备包括作为核心的计算单元,例如微处理器,其用于执行用于生成异态数据的方法,以及至少一个用于数据缓冲存储的系统内存。此外,为了持续地存储旧程序版本或者新程序版本以及异态数据,存在有非临时的数据存储器,如硬盘或者闪存。此外,数据处理设备具有通信接口,利用该通信接口可以构成无线的或者通过电缆与至少另一个预备接收的数据处理设备建立数据连接,从而通过该数据接口传输异态数据。这样的数据接口可以例如是GSM接口或者网络连接。
此外,在一个优选的设计方案中,数据处理设备包括输入单元,如键盘或者鼠标,从而,借此可以预先输入作为相同的归入的程序部分的最小值。该输入能够用于最优化创建异态数据的方法以及用于影响异态数据的存储值。方法确定的最小值表现为计算机指令,因此,在相同的程序部分中,运算域和操作标记必须一致。产生偏差时,使用者可以说明相同的程序部分的最小值为该最优单元的几倍。然后计算单元相应地考虑到预定值,其中,该预定值对应于新的程序部分的较小的相同程序部分。
根据本发明的用于接收和处理异态数据的数据处理设备包括作为核心的计算单元,其执行用于更新旧程序版本的方法。此外,存在的用于数据缓存的系统内存、用于存储旧程序版本和新程序版本以及异态数据的非临时的数据存储器、以及通信接口可以利用无线的或者有线的连接来建立预备发送的数据处理设备的连接,以使得该数据处理设备再次接受异态数据。
在一个优选的设计方案中,在接受异态数据之后,计算单元根据校验和来检查,是否执行无错误的传输。此外,在另一个设计方案中,根据一同发送的文件地址检查异态数据的真实性,从而验证数据是否由有资格的发送器发送。
如果根据校验和或者文件地址确定,即异态数据无效,那么更新被中断,并且错误可以在错误存储器中保存。
新程序版本的生成过程可以或者在成功地接收之后直接启动,或者通过确定的结果,如通过旧版本的有效的流程来更新。
新创建的程序版本可以再次根据校验和来检查其正确性,并且在错误的情况下,通过旧程序版本代替,为此其必须被单独地存储。在该种情况中,相应的错误报告也被存储。
附图说明
接下来,参考实施例和附图对本发明进一步解释。图中示出:
图1有两个原始的函数组成的计算机程序的更新;
图2用于创建和发送异态数据的数据处理设备;
图3图2中示出的数据处理设备与数据中心以及两个接收和处理异态数据的数据处理设备的通信。
具体实施方式
作为举例,在安装在机动车中的收费设备时,考虑到旧程序版本的更新。在此,用于创建异态数据的数据处理设备与所谓的数据中心、中央通信计算机连接,该计算机可以操纵多个收费设备的更新。
在图2中示出了这样的用于创建异态数据的数据处理设备11。可以看到计算单元12,该计算单元执行用于异态数据的创建的方法,并且该计算单元与以太网通信接口15连接,以及系统内存13和非临时数据存储器14,其设计为硬盘。此外,计算单元12与作为输入单元16使用的键盘连接,利用该键盘执行相关于相同的程序部分的最小值的预先输入,或者可以通过手来操纵到收费设备的异态数据的传输过程。此外,为了检测输入,图形显示单元22与计算单元12连接。
在图3中示出了与数据中心22连接的数据处理设备11。数据中心22又通过GSM无线电与两个作为收费设备设计的数据处理设备17连接。数据中心22除了具有计算单元23之外还具有以太网接口24、GSM接口25以及系统内存和非临时的数据存储器27。在每个数据处理单元17中设置有一个计算单元18,该计算单元执行用于更新旧程序版本的方法。该计算单元与GSM通信接口19、系统内存21和作为非临时的数据存储器20使用的闪存(Flash-ROM)连接。输入单元和输出单元在该设备中不一定是必要的,因此,其可以不依赖操作者地工作。
在接下来的举例中,在收费设备上运行的计算机程序的旧程序版本由两个函数构成,其中,第二个函数从第一个函数中调入。
函数具有下列C-源代码:
Void FunctionA(void)
{
FunctionB();
}
void FunctionB(void)
{
int y=1;
}
用于ARM7处理器的计算机指令的助记忆的形式如下:
FunctionA:
stmdb r 13!,{r14}
b1 FunctionB
ldmia r13!,{pc}
FunctionB:
mov r0,#1
mov pc,r14
在新程序版本中,粘贴第三个函数,即在函数A和B之间。
void FunctionA(void)
{
FunctionB();
}
void FunctionC(void)
{
int x=0;
}
void FunctioB(void)
{
int y=1;
}
用于FunctionC的转换具有形式:
Function C:
mov 0,#0
mov pc,r14。
因为对于本发明,带有地址参考的指令,如这里的分支指令b1扮演决定性的角色,所以在这个举例中仅仅考虑其二进制形式,而在简化用于描述剩余的指令时保持助记忆的形式。
指令“b1 FunctionB”的操作标记是部分“b1”(分支和链接),其作为“0 x eb”二进制地写入。用于位移指令的FunctionB的相对位置作为运算域注册。因为两个指令长度位于旧程序版本中在分支指令的程序地址和FunctionB之间,因此相对的位移地址对应于8Byte,因为ARM 7处理器是32位处理器。然而,在分支指令“b1”中,相对的位移地址已经被解释为包括8 Byte的偏移量,因此分支指令的运算域是0 x 000000。
在接下来的表1中,在旧版本和新版本中对比地示出用于ARM7的转换。如在新版本的程序行2中,根据FunktionB的位移,分支指令的相对的位移地址向下以两个指令长度提高8 Byte(0 x 000002)。
在比较作为新的程序部分的程序行2和4-5时,常规的差值压缩算法被识别。
表 1:在举例1中,旧版本和新版本的助记符号
程序行 | 旧程序版本 | 新程序版本 |
1 | stmb r13,{r14} | stmb r13!,{r14} |
2 | 0xeb000000 | 0xeb000002 |
3 | ldmia r13!,{pc} | ldmia r13!,{pc} |
4 | mov r0,#1 | mov r0,#0 |
5 | mov pc,r14 | mov pc,r14 |
6 | mov r0,#1 | |
7 | mov pc,r14 |
与此相反,用于创建异态数据的根据本发明的算法识别行1作为第一个相同的程序部分以及行3作为第二个相同的程序部分并且行6和行7作为第三个相同的程序部分。算法从旧程序版本开始运算并且尝试在新的版本中再次寻找在那里存在的程序行。如果行的位置移动,那么在旧版本中的在该行之后的行同样在移动过的位置搜索。旧版本的彼此排列的行4和5在行6和7再次被发现,因此在相同的程序行5和7之间可以没有混淆,而是新的行5明确地对应于新的程序部分。
接下来,在搜索相对相同的计算机指令时,算法发现在行2中的位移指令,其不仅相邻第一个相同的部分而且相邻于第二个相同的部分。在两个程序版本中,该位移指令参照同一个相同的程序部分,因此指令添加第一个相同的程序部分。接着,第二个相同的程序部分直接关联到第一个相同的程序部分上,从而使这两个相同的程序部分可以关联成一个单独的相同的程序部分。算法仅仅识别新版本的行4和5为新的程序部分。
包括在异态数据中的新程序版本的程序行4和5的内容与定位信息,例如像详尽描述的程序地址一样被联系到一起,该程序地址在这里通过行号说明。此外,异态数据包括数据,即同一个相同的程序部分处于新的行1到3之间,如在旧的行1到3之间,并且新的版本的行6和7对应于旧的版本的行4和5。
异态数据的存储大小不仅仅这样地实现,即行2不必作为包括粘贴地址数据的相同的程序部分存储,而是这样地,即行1到3被作为来相关联的相同的程序部分识别,在其中必须仅包括一个而不是两个复制地址数据的语句。在简化的举例中明确地实现的异态数据的减少使增加的程序长度和程序复杂性增加许多倍。
在间接的存取指令时,第二个举例说明地址参考的查找。
程序版本分别由以不同的源代码文件(Modul1.c和Modul2.c)存储的总程序的两个的部分组成。
旧的版本:
Modul1.c:
const int x=1;
Modul2.c:
void Function1{void}
{
int local;
local=x;
}
新的版本:
Modul1.c:
const int y=2;
const int x=1;
Modul2.c:
void Function1{void}
{
int local;
local=x;
}
Modul2.c在两个程序版本这是相同的,而在Modul1.c中常数y的说明是新添加的。
用于ARM7的所属转换的摘要可在表2中找到,其中,二进制代码和对应的助记符号分开示出。
在程序地址0 x 41000104上,间接存储指令“ldr r0,0 x 41000110”(从地址0 x 41000110加载注册r0)在两个版本中,该指令具有作为地址参考的绝对程序地址0 x 41000110。在给第一个地址上发现第二个程序地址和第二地址参考的参照,0 x 41000200或者0 x 41000204。常数x处于第二个地址上。利用指令“ldr r0,0 x 41000110”,一个值被第二个地址参考加载,其中,第二个地址参考利用包含在指令中的第一个地址参考发现。
根据本发明的用于创建异态数据的算法,在比较程序版本的二进制代码时识别从0 x 41000104到0 x 4100010c的行作为第一个相同的程序部分。该算法识别在旧程序版本中的行0 x 41000200和新程序版本中的行0 x 41000204同样作为相同的程序部分。
表 2:在举例2中的新版本和旧版本的助记符号
在新程序版本中的作为新归入的程序部分-行0 x 41000110和0 x 41000200中,利用作为运算域的地址参考来查找计算机指令。然而没有行包括计算机指令,因为两个行属于所谓的“文字池”或者文字区域。在举例中,固定值1和2是文字。文字区域在该联系中示出在地址空间中的区域,文字以及所属的地址保存在该地址空间中。
除了在新的程序部分中利用作为运算域的地址参考来查找计算机指令之外,相同的程序部分利用地址参考查找间接的存取指令。同时在行0 x 41000104中找到指令ldr,其地址参考参照第二地址参考,第二地址参考指示第二个相同的程序部分。借此,因为至今作为新归入的程序部分0 x 41000110包括带有在相同的程序部分上的地址参考的指令字(0 x 41000200或0 x 41000204),所以该指令字同样作为相同的程序部分整理。因为其直接连接在第一个相同的程序部分上,所以其对应于该程序部分。
异态数据的存储值在利用标准压缩方法压缩之后可以进一步降低,该异态数据从收费中心发送到在机动车中安装的收费设备中。当要更新的收费设备在下一次在中心注册时,这样的过程例如被激活,从而交换街道使用数据。在与中心第一次接触之后,直接向收费设备发送一个更新请求,紧接着收费设备进入用于异态数据的接收模式。
在数据处理设备11确定异态数据之后,该设备通过以太网连接发送异态数据到数据中心22。数据中心等待至今还没有更新的收费设备再一次在中心注册。因此,例如车队的两辆载重汽车刚刚为一次货物运输而启动,并且在载重汽车中安装的数据处理设备17向数据中心注册用于接下来获得街道使用费用。接着,数据中心22要求设备17接收异态数据。在异态数据通过GSM传输到收费设备上之后,收费设备根据一同发送来的校验和来检测,是否实现无错误的传输。此外,利用预先在收费设备中保存的密码来验证,利用异态数据传送到文件地址是否是正确的,也就是说,异态数据是否出自于值得信赖的来源。随后,在收费设备中保存的旧的计算机程序的更新过程开始。
另外,在图3中,这也是可能的,即数据处理设备11本身作为中心而工作,并且相应地直接构成到收费设备的数据连接,并可以将异态数据传输给收费设备。
图1示出了上面描述的第一个程序举例的更新的示意图。旧程序版本1用于作为复制原件的更新方法。复制地址数据10详细地说明从旧程序版本1中复制出哪些部分,并且该复制出来的部分必须复制到新程序版本2的哪个位置。该复制地址数据属于描述相同的程序部分的异态数据3的第一部分6的定位。在示出的举例中,作为单独的计算机指令的位移指令以其二进制的形式示出。其可以在操作符号4(“0 x eb”)和操作符号5(“0 x 000000”)中分割。
利用属于异态数据3的第二部分7的粘贴地址数据9,新的程序部分8可以粘贴在相同的程序部分之间。
接下来,更新方法在相同的程序部分中查找带有地址参考的指令字,并且发现指令0 x eb000000,其原始地参照程序行4。假如该程序行现在在行6中发现,算法剔除复制地址数据。该算法可以相应地计算作为4指令长度的相对的位移地址,并且因为算法对指令0 x eb解码,所以这也是可知的,即相对的位移地址利用2个指令的偏差来说明。算法相应地计算0 x 000002作为新的运算域5,并且登记在行2中。新程序版本2可以根据另一个校验和来检验其正确性。
如果成功地实现了更新,那么各个收费设备自动地启动执行新程序版本。
在第二个程序举例中,更新方法在相同的程序部分中发现来自行0 x 41000104的ldr指令,以及在文字区域中在程序地址0 x 41000110上的第二地址参考的参照。第二地址参考在旧程序版本0 x 41000200中执行。所属的程序行(0 x 00000001)在新的版本中移动到绝对地址0 x 41000204。更新算法将该新的地址参考登记在新程序版本中。
Claims (23)
1.一种用于在要更新的计算机程序的旧程序版本和计算机程序的新程序版本之间产生异态数据的方法,其中
-所述新程序版本(2)可以由异态数据(3)和所述旧程序版本(1)生成,
-所述旧程序版本(1)和所述新程序版本(2)的二进制程序代码互相比较,该程序代码由指令字构成,并且
-相同的程序部分被确定,该相同的程序部分不仅存在于所述旧程序版本(1)中而且还存在于所述新程序版本(2)中,并且所述相同的程序部分包括至少一个所述指令字,以及复制地址数据(10)作为所述异态数据(3)的第一部分(6)存储,该复制地址数据确定在所述旧程序版本(1)内部的和在所述新程序版本(2)内部的相同的程序部分的定位,
其特征在于,包括以下步骤:
-确定由绝对相同的指令字的保持不变的序列的所述旧程序版本(1)和所述新程序版本(2)的二进制程序代码以及由包括有地址参考的所述指令字组合而成的所述相同的程序部分,该地址参考参照另一个绝对相同的指令字,
-对作为所述新的程序部分(8)的不相同的以及其余的不变的包括在所述新程序版本(2)的程序代码中的程序部分归类,
-存储所述新的程序部分(8),并且由粘贴地址数据(9)和修正数据修正所述地址参考,所述粘贴地址数据确定在所述新程序版本(2)的程序代码内部的所述新的程序部分(8)的定位,其中,所述新的程序部分(8)、所述粘贴地址数据(9)以及所述修正数据构成所述异态数据(3)的第二部分(7)。
2.根据权利要求1所述的方法,其特征在于,重复地实现所述相同的程序部分的确定,其中
-首先,仅仅绝对相同的指令字被作为相同的程序部分识别,
-接下来,在相同的和新的程序部分查找带有所述地址参考的所述指令字,
-假如所述地址参考参照相同的程序部分,那么所属的指令字作为所述相同的程序部分来整理,
-紧接着,再一次开始搜索所述地址参考,该地址参考参照相同的程序部分。
3.根据权利要求2所述的方法,其特征在于,首先,所述相同的程序部分作为所述绝对相同的指令字的连贯的序列来搜索,其中,所述序列具有最小数目的所述绝对相同的指令字。
4.根据权利要求2所述的方法,其特征在于,在所述新的程序部分查找相对相同的计算机指令,在该指令中,操作标记(4)存在于两个程序版本中,并且运算域(5)说明所述地址参考,该地址参考参照所述相同的程序部分。
5.根据权利要求2所述的方法,其特征在于,在所述相同的程序部分查找间接存取指令,其运算域参照所述新的程序部分内部的所述地址参考,并且所述地址参考又参照所述相同的程序部分,紧接着,属于所述地址参考的指令字被同样作为所述相同的程序部分分类。
6.根据前述权利要求中任一项所述的方法,其特征在于,在所述异态数据(3)的生成结束之后,执行所述异态数据(3)的确认,其中
-产生所述新程序版本的拷贝,其中所述相同的程序部分从在复制地址数据(10)的位置上的所述旧程序版本(1)中复制出来,并且所述新的程序部分(8)被粘贴到粘贴地址数据(9)的位置上,
-所述所有参照所述相同程序部分的地址参考被查找,并且被参考的所述相同的程序部分的新的定位被计算,
-对应于所述新定位的所述地址参考的修正被执行,
-所述程序版本的拷贝与所述新程序版本(2)比较。
7.根据权利要求6所述的方法,其特征在于,在确认时,所述相同的程序部分的未被解释的数据被识别,其二进制的形式总是与所述指令字的二进制的形式或者与来自于所述旧程序版本(1)的指令字的序列的二进制的形式一致。
8.根据权利要求7所述的方法,其特征在于,属于所述未解释的数据的指令字从所述相同的程序部分中删除,并且作为所述新的程序部分(8)存储。
9.根据权利要求7所述的方法,其特征在于,地址数据作为所述异态数据(3)的第三个部分存储,所述地址数据确定所述旧程序版本(1)和所述新程序版本(2)的二进制程序代码内部的所述未解释的数据的定位。
10.一种用于利用在计算机程序的旧程序版本(1)的二进制程序代码和新程序版本(2)的二进制程序代码之间的异态数据(3)对计算机程序的旧程序版本(1)进行更新的方法,其中
-所述二进制程序代码由指令字构成,
-所述异态数据(3)至少包括复制地址数据(10)、新的程序部分(8)以及粘贴地址数据(9),
-所述复制地址数据(10)确定在所述旧程序版本(1)和新程序版本(2)的内部的相同的程序部分的定位,
-所述相同的程序部分由完全相同的指令字的保持不变的序列的所述旧程序版本(1)和所述新程序版本(2)的二进制程序代码以及包括有地址参考的所述指令字构成,所述地址参考参照另一个完全相同的指令字,
-所述新的程序部分(8)为所有不相同的和其余不变的包括在所述新程序版本(2)的程序代码中的程序部分,通过所述粘贴地址数据(9)确定在所述新程序版本(2)的二进制程序代码的内部的定位,
其特征在于,包括以下步骤:
-从所述旧程序版本(1)中复制出所述相同的程序部分,并且利用所述复制地址数据(10)在所述新程序版本(2)中定位所述相同的程序部分,
-利用所述粘贴地址数据(9)在所述新程序版本(2)中粘贴所述新的程序部分(8),
-利用属于所述异态数据的修正数据,在所述相同的程序部分中确定新的地址参考,并且修正所述地址参考。
11.根据权利要求10所述的方法,其特征在于,所述地址参考被确定,该地址参考参照所述相同的程序部分,并且所述地址参考对应于所述相同的程序部分的新的定位来修正。
12.根据权利要求11所述的方法,其特征在于,所述被参考的相同的程序部分的新定位被作为在所述旧程序版本(1)中的定位与在所述新程序版本(2)中的定位之间的位移来计算。
13.根据权利要求11所述的方法,其特征在于,所述被参考的相同的程序部分的新的定位被作为在所述新程序版本(2)中的绝对定位来计算。
14.一种用于创建和传输异态数据(3)的数据处理设备(11),其具有:
-计算单元(12),所述计算单元更新旧程序版本,所述计算单元执行根据权利要求1至9所述的方法,
-与所述计算单元(12)连接的系统内存(13),用于数据的缓冲存储,
-与所述计算单元(12)连接的非临时数据存储器(14),用于存储旧程序版本(1)、新程序版本(2)以及异态数据(3),
-与所述计算单元(12)连接的通信接口(15),用于构成到至少另一个预备接收的数据处理设备(22)的数据连接,并且用于到至少另一个数据处理设备(22)的所述异态数据(3)的数据传输。
15.根据权利要求14所述的数据处理设备(11),其特征在于,所述计算单元(12)与输入单元(16)连接,该输入单元用于相同的程序部分的最小值的输入,该最小值作为至少属于相同的程序部分的计算机指令的数量,并且所述计算单元(12)如下地考虑所述相同的程序部分的最小值,即其对应于相同的程序部分,该程序部分的值小于相邻的新的程序部分(8)的最小值。
16.一种用于接收和处理异态数据(3)的数据处理设备(17),其具有:
-计算单元(18),所述计算单元更新旧程序版本,所述计算单元执行根据权利要求10-13所述的方法,
-与所述计算单元(18)连接的通信接口(19),用于构成到另一个预备发送的数据处理设备(22)的数据连接,并且用于从另一个数据处理设备(22)接收所述异态数据(3),
-与所述计算单元(18)连接的非临时数据存储器(20),用于存储旧程序版本(1)、新程序版本(2)以及所述异态数据(3),
-与所述计算单元(18)连接的系统内存(21),用于数据的缓冲存储。
17.根据权利要求16所述的数据处理设备(17),其特征在于,在更新所述旧程序版本(1)之后,所述计算单元(18)根据校验和来检查所述新程序版本(2)的有效性。
18.根据权利要求16所述的数据处理设备(17),其特征在于,在更新所述旧程序版本(1)之后,所述计算单元(18)根据文件地址来检查所述新程序版本(2)的有效性。
19.根据权利要求17所述的数据处理设备(17),其特征在于,在所述新程序版本(2)无效时,所述计算单元(18)通过所述旧程序版本(1)替代所述新程序版本(2),并且产生一个错误报告。
20.根据权利要求17所述的数据处理设备(17),其特征在于,在所述新程序版本(2)有效时,所述计算单元(18)自动执行所述新程序版本(2)。
21.根据权利要求16所述的数据处理设备(17),其特征在于,在接收所述异态数据(3)之后,所述计算单元(18)直接开始所述旧程序版本(1)的更新。
22.根据权利要求16所述的数据处理设备(17),其特征在于,所述通信接口(19)是GSM接口。
23.根据前述权利要求14至22中任一项所述的数据处理设备(11、17),其特征在于,发送之前或者接受之后,所述计算单元(12、18)利用标准的压缩方法压缩或者解压缩所述异态数据(3)。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
DE102004010179A DE102004010179A1 (de) | 2004-03-02 | 2004-03-02 | Verfahren und Datenverarbeitungsgerät zur Aktualisierung von Rechnerprogrammen per Datenübertragung |
DE102004010179.5 | 2004-03-02 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1926513A CN1926513A (zh) | 2007-03-07 |
CN100474248C true CN100474248C (zh) | 2009-04-01 |
Family
ID=34917059
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2005800067034A Expired - Fee Related CN100474248C (zh) | 2004-03-02 | 2005-02-01 | 用于通过数据传输更新计算机程序的方法和数据处理设备 |
Country Status (5)
Country | Link |
---|---|
EP (1) | EP1721248B1 (zh) |
CN (1) | CN100474248C (zh) |
AT (1) | ATE365348T1 (zh) |
DE (2) | DE102004010179A1 (zh) |
WO (1) | WO2005085993A2 (zh) |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7890464B2 (en) * | 2003-06-20 | 2011-02-15 | Innopath Software, Inc. | Processing software images and generating difference files |
WO2012079230A1 (en) * | 2010-12-15 | 2012-06-21 | Microsoft Corporation | Intelligent code differencing using code clone detection |
KR101602993B1 (ko) | 2012-08-23 | 2016-03-11 | 엘에스산전 주식회사 | 프로그래밍 언어 오류 검색 장치 |
CN106203460A (zh) | 2015-05-05 | 2016-12-07 | 杜比实验室特许公司 | 训练信号处理模型以用于信号处理系统中的部件替换 |
CN106656200B (zh) * | 2016-12-13 | 2019-11-08 | 合肥工业大学 | 一种程序计数器压缩方法及其硬件电路 |
WO2018173911A1 (ja) * | 2017-03-24 | 2018-09-27 | 日立オートモティブシステムズ株式会社 | 車載制御装置、及び、プログラム更新ソフトウェア |
CN109471656A (zh) * | 2017-09-06 | 2019-03-15 | 上海汽车集团股份有限公司 | 一种程序刷新方法及装置 |
CN111737638A (zh) * | 2020-06-11 | 2020-10-02 | Oppo广东移动通信有限公司 | 基于傅里叶变换的数据处理方法及相关装置 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
IL125846A0 (en) * | 1998-08-19 | 1999-04-11 | Emony | Incremental program update |
AU2004250442B2 (en) * | 2003-06-23 | 2010-11-18 | Red Bend Ltd. | Method and system for updating versions of content stored in a storage device |
-
2004
- 2004-03-02 DE DE102004010179A patent/DE102004010179A1/de not_active Withdrawn
-
2005
- 2005-02-01 CN CNB2005800067034A patent/CN100474248C/zh not_active Expired - Fee Related
- 2005-02-01 EP EP05716610A patent/EP1721248B1/de not_active Not-in-force
- 2005-02-01 WO PCT/EP2005/050420 patent/WO2005085993A2/de active IP Right Grant
- 2005-02-01 AT AT05716610T patent/ATE365348T1/de active
- 2005-02-01 DE DE502005000902T patent/DE502005000902D1/de active Active
Non-Patent Citations (2)
Title |
---|
Compressing differences of executable code. BAKER B S ET AL.WORKSHOP ON COMPLIER SUPPORT FOR SYSTEM SOFTWARE AND ACM SIGPLAN. 1999 |
Compressing differences of executable code. BAKER B S ET AL.WORKSHOP ON COMPLIER SUPPORT FOR SYSTEM SOFTWARE AND ACM SIGPLAN. 1999 * |
Also Published As
Publication number | Publication date |
---|---|
DE102004010179A1 (de) | 2005-10-06 |
ATE365348T1 (de) | 2007-07-15 |
EP1721248B1 (de) | 2007-06-20 |
DE502005000902D1 (de) | 2007-08-02 |
CN1926513A (zh) | 2007-03-07 |
WO2005085993A2 (de) | 2005-09-15 |
WO2005085993A3 (de) | 2006-06-29 |
EP1721248A2 (de) | 2006-11-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN100474248C (zh) | 用于通过数据传输更新计算机程序的方法和数据处理设备 | |
CN100447740C (zh) | 数据的包内增量压缩的系统和方法 | |
CN105446723A (zh) | 用于标识源代码版本之间的语义区别的方法和装置 | |
KR102088167B1 (ko) | 소프트웨어 업데이트 에이전트 장치 및 이를 통한 패치방법 | |
CN108279922A (zh) | 差分文件生成方法、基于该差分文件的升级方法及系统 | |
US20050283342A1 (en) | System and method for tracking engineering changes relating to a circuit card | |
CN106815051A (zh) | 一种嵌入式设备的固件升级方法、装置及验钞器 | |
CN108205446A (zh) | 固件修复方法及装置 | |
CN107992325A (zh) | 一种通过特征码检验比对文件信息的方法 | |
CN106055375A (zh) | 应用程序安装方法及装置 | |
CN102346925B (zh) | 电子票存储设备、电子检票系统及方法 | |
KR100826553B1 (ko) | 네비게이션 단말기, 그의 지도 정보 업데이트 시스템, 방법및 기록매체 | |
CN101681415B (zh) | 用于改变和添加数字内容功能的激活密钥的方法和设备 | |
CN107943504B (zh) | 一种嵌入式系统中软件模块的动态升级方法 | |
US20040181777A1 (en) | Method and device for programming electronic devices using a uniform parameter format | |
CN113791809B (zh) | 应用异常处理方法、装置以及计算机可读存储介质 | |
US20080270430A1 (en) | File management system, file management method, support device thereof, and program thereof | |
CN101197959A (zh) | 一种终端的控制方法、系统和设备 | |
CN104572145A (zh) | 文件版本管理方法及系统 | |
CN113568834A (zh) | Sdk代码的兼容性检测方法、装置、计算机设备和介质 | |
CN106201606A (zh) | 软件发布方法与系统 | |
CN113157329A (zh) | 启动应用的方法、系统、服务器和存储介质 | |
KR101737575B1 (ko) | 자동 생성된 sql 구문 기반의 데이터 검증 방법 및 장치 | |
KR101737576B1 (ko) | 자동 생성된 sql 구문 기반의 데이터 이관 방법 및 장치 | |
EP0918293A2 (en) | Integrated retrieval system, integrated retrieval method and media recorded with integrated retrieval program in distributed file system |
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 | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20090401 Termination date: 20180201 |
|
CF01 | Termination of patent right due to non-payment of annual fee |