CN103777948B - 一种基于代码相似度保持的嵌入式软件更新方法 - Google Patents

一种基于代码相似度保持的嵌入式软件更新方法 Download PDF

Info

Publication number
CN103777948B
CN103777948B CN201410015803.4A CN201410015803A CN103777948B CN 103777948 B CN103777948 B CN 103777948B CN 201410015803 A CN201410015803 A CN 201410015803A CN 103777948 B CN103777948 B CN 103777948B
Authority
CN
China
Prior art keywords
code
address
new version
instruction
version
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
CN201410015803.4A
Other languages
English (en)
Other versions
CN103777948A (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.)
Zhejiang University ZJU
Original Assignee
Zhejiang University ZJU
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 Zhejiang University ZJU filed Critical Zhejiang University ZJU
Priority to CN201410015803.4A priority Critical patent/CN103777948B/zh
Publication of CN103777948A publication Critical patent/CN103777948A/zh
Application granted granted Critical
Publication of CN103777948B publication Critical patent/CN103777948B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开了一种基于代码相似度保持的嵌入式软件更新方法,包括:通过新版本代码的地址空间生成位图段,并且,或者以所述位图段中的“1”表示新版本代码中的对应地址的指令包含引用且以位图段中的“0”表示新版本代码中的对应地址的指令不包含引用,或者以所述位图段中的“0”表示新版本代码中的对应地址的指令包含引用且以位图段中的“1”表示新版本代码中的对应地址的指令不包含引用;将新版本代码中所有的引用目标地址生成一个新版本定位表,每个引用目标地址在所述新版本定位表中各有一个唯一的索引,然后将新版本代码中的各个引用目标地址分别替换成该引用目标地址在所述新版本定位表中的对应索引,生成代码段。

Description

一种基于代码相似度保持的嵌入式软件更新方法
技术领域
本发明属于无线自组织网络与资源受限的传感网络领域,涉及一种嵌入式软件更新方法,用于实时对无线传感器网络中的程序进行更新。
背景技术
随着通信、传感器制造、嵌入式计算的日益成熟,大规模无线传感网络技术迅速发展并被广泛应用到环境、国防、救灾抢险、城市管理等诸多领域。典型的无线传感器网络由大量微型传感器节点组成,它们能够在恶劣及危险环境中迅速展开,并通过无线自组成网,不受现有有线网络基础设施的限制。感知数据通过无线通信以多跳中继方式汇集到数据处理中心。无线传感器网络使人们在任何时间、地点和环境条件下实时获取大量详实而可靠的信息,体现“计算无处不在”理念。
目前已经有大量研究工作致力于如何对大规模无线传感网络进行程序更新。然而当前的软件更新技术并不令人满意。串行更新方法由于需要将所有的部署的节点回收,逐个写入新版本程序然后重新部署,其低下的效率使得这种代码更新方法不能应用到大规模的无线传感网络中去。因此提出了无线重编程技术来使得节点可以通过无线通信来自动进行程序更新。但是已有的一些方法由于向无线网络发送的数据过多,造成无线传输能耗过大而不适用于资源受限的无线传感网络。
发明内容
本发明的目的是提供一种基于代码相似度保持的嵌入式软件更新方法,让新版本代码和旧版本代码之间的相似度更高,使得生成的新版本代码相对于旧版本代码的增量描述文件更小。
为实现上述目的,本发明基于代码相似度保持的嵌入式软件更新方法包括:
通过新版本代码的地址空间生成位图段,并且,以所述位图段中的“1”表示新版本代码中的对应地址的指令包含引用且以位图段中的“0”表示新版本代码中的对应地址的指令不包含引用,或者以所述位图段中的“0”表示新版本代码中的对应地址的指令包含引用且以位图段中的“1”表示新版本代码中的对应地址的指令不包含引用;
将新版本代码中所有的引用目标地址生成一个新版本定位表,每个引用目标地址在所述新版本定位表中各有一个唯一的索引,然后将新版本代码中的各个引用目标地址分别替换成该引用目标地址在所述新版本定位表中的对应索引,生成代码段。
优选地,本发明所述“将新版本代码中所有的引用目标地址生成一个新版本定位表”的方法如下:
第一步,新建一个空的旧版本代码的定位表作为旧版本定位表,从旧版本代码的起始地址处按照地址递增的方向遍历旧版本代码的每一条指令的地址,判断每一条指令的地址是否是旧版本代码中的一个引用目标地址:如果是,则将相应指令的地址按遍历的先后顺序逐个添加到旧版本定位表中,如果不是,则不添加;
第二步,新建一个空的新版本代码的定位表作为所述新版本定位表,然后从新版本代码的起始地址处按照地址递增的方向逐个检查新版本代码的每一条指令的地址是否为新版本代码中的一个引用目标地址:
如果新版本代码的被检查的指令的地址是新版本代码中的一个引用目标地址,则判断在旧版本代码中是否存在与所述被检查的指令相同的指令,若存在,则根据该指令在旧版本代码中的地址找到其在旧版本定位表中的索引,然后在新版本定位表的相同索引位置处插入新版本代码的被检查的指令的地址;若不存在,则将新版本代码的被检查的指令的地址插入到新版本定位表的第一个空位置。
与现有技术相比,本发明的有益效果是:分别将新版本代码和旧版本代码中所有的引用目标地址生成新版本定位表和旧版本定位表,在新版本定位表的生成过程中参考了已生成的旧版本定位表,使得新旧版本代码中相同的引用目标地址在新旧版本定位表中的索引相同;然后分别将新版本和旧版本代码中所有的引用目标地址替换成该引用目标地址分别在新版本和旧版本定位表中的索引,分别生成新旧版本代码的代码段,通过本发明,使得新版本和旧版本代码的代码段的相同部分最多,也就使得最后生成的增量描述文件比现有技术更小。
附图说明
图1是本发明的一种旧版本代码及其结构的示意图;其中,图1(a)为旧版本代码及对应反编译出的汇编指令,图1(b)表示旧版本代码的结构,分为代码段、位图段和定位表;
图2是本发明的一种新版本代码及其结构的示意图,其中,图2(a)为新版本代码及对应反编译出的汇编指令,图2(b)表示新版本代码的结构,分为代码段、位图段和定位表。
具体实施方式
为了使本发明所解决的技术问题及有益效果更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
以下结合图1、2,以具体的实施例详细说明本发明。
代码相似度保护技术主要是为了消除因为代码更新引起的引用地址偏移而造成的代码相似度的降低,增加新版本和旧版本代码的相似度,使得差分算法能找到更多的公共代码段,生成更小的增量文件。
通过新版本代码的地址空间生成位图段,位图段中每一位表示2字节(即16位)的地址,此实施例中约定,以位图段中的“1”表示新版本代码中的对应地址的指令包含引用且以位图段中的“0”表示新版本代码中的对应地址的指令不包含引用。
如图1所示,图2(a)为新版本代码及对应反编译出的汇编指令,图2(b)表示其结构,分别为代码段、位图段和定位表。位图段标记引用的指令的地址,定位表则保存引用目标地址。图2(a)中,新版本代码的地址空间为“0f 93 b0 12 76 4e b0 12 e6 4d”,下划线标记的“764e”和“e6 4d”表示包含引用的指令,对应的反汇编指令分别为“call #0x4e76”和“call#0x4de6”,这也表明了数值是按小端格式存储的,即内存中存储的“76 4e”,对应的十六进制数值0x4e76。指令“0f 93b0 12”不包含引用,故在位图段中标记“00”,指令“76 4e”包含引用,故在位图段中标记为“1”,最后新版本代码的位图段为“00101”,如图2(b)所示。同理分析,旧版本代码的位图段为“00101”,如图1(b)所示。
将新版本代码中所有的引用目标地址生成一个新版本定位表,每个引用目标地址在所述新版本定位表中各有一个唯一的索引,所述定位表的生成方法如下:
第一步,新建一个空的旧版本代码的定位表作为旧版本定位表,从旧版本代码的起始地址处按照地址递增的方向遍历旧版本代码的每一条指令的地址,判断每一条指令的地址是否是旧版本代码中的一个引用目标地址:如果是,则将相应指令的地址按遍历的先后顺序逐个添加到旧版本定位表中,即低地址比高地址先被遍历到,所以低地址处的相应指令的地址先被添加到旧版本定位表中,如果不是,则不添加。
如图1(a)所示,旧版本代码的起始地址为4a00,总共包含3条指令,按地址递增的方向依次遍历的地址为4a00、4a02和4a06。位于地址4a00处的指令为“0f 93”,不包含引用,所以不添加。而位于地址4a04处的“40 53”和地址4a08处的“e6 4d”都包含引用指令,遍历时先遇到“40 53”,所以旧版本定位表中的索引0的位置存放“40 53”,随后遇到“e6 4d”,故索引1的位置存放“e6 4d”,最终的旧版本定位表如图1(b)所示。
第二步,新建一个空的新版本代码的定位表作为所述新版本定位表。然后从新版本代码的起始地址处按照地址递增的方向逐个检查新版本代码中的每一条指令的地址是否为新版本代码中的一个引用目标地址。如果被检查的指令的地址是新版本代码中的一个引用目标地址,则判断在旧版本代码中是否存在与所述被检查的指令相同的指令,若存在,则根据该指令在旧版本代码中的地址找到其在旧版本定位表中的索引,然后在新版本定位表的相同索引位置插入新版本代码的被检查的指令的地址;若不存在,则将新版本代码的被检查的指令的地址插入到新版本定位表中的第一个空位置中。
如图2(a)所示,新版本代码的起始地址为4a00,也包含3条指令,按地址递增的方向依次遍历的地址为4a00、4a02和4a06。位于地址4a00处的指令为“0f 93”,不包含引用,所以不处理。而位于地址4a04处的“76 4e”和地址4a08处的“e6 4d”都包含引用指令,首先,判断在旧版本代码中是否存在“76 4e”,结果为不存在,则把“76 4e”插入到新版本定位表中的第一个空位置(即索引0的位置),然后再判断“e6 4d”是否存在于旧版本代码中,结果为存在,则根据“e6 4d”在旧版本代码中的地址找到其在旧版本定位表中的索引(即索引1,如图1(b)所示),然后在新版本定位表的索引1的位置插入“e6 4d”,最终的新版本定位表如图2(b)所示。
将新版本代码中的各个引用目标地址分别替换成该引用目标地址在所述新版本定位表中的对应索引,生成代码段。
如图2(a)所示,将新版本代码中所有的引用目标地址(即“76 4e”和“e6 4d”)分别替换成其在新版本定位表(如图2(b)所示)中的索引,分别为索引0、索引1,最终得到的新版本代码的代码段为“0f 93b0 12 00 00b0 12 01 00”,如图2(b)所示。注意在替换过程中要遵循小端存储格式,即替换成的索引1在代码段中的正确表示为“01 00”。同理,将旧版本代码中所有的引用目标地址分别替换成其在旧版本定位表中的所有,得到旧版本代码的代码段为“0f 93 b0 12 00 00 b0 12 01 00”,如图1(b)所示。
最后,使用已有字节匹配差分方法,比较新版本和旧版本代码的代码段,生成增量描述文件。增量描述文件中包含两个指令,分别为:
ADD指令:ADD1<n>2<Byte1…Byten>n
COPY指令:COPY1<n>2<old_address>2
指令中的下标表示组成指令的各部分所占用的字节数,ADD指令表示新版本代码中的字节不在旧版本代码中,需要额外插入,ADD1表示指令的操作码占一个字节,<n>2表示要插入的字节数,占2个字节,后面的<Byte1…Byten>n表示要插入的字节序列,故这个指令的大小为3+n。COPY指令表示,新版本中的字节存在于旧版本代码中,只需要从旧版本代码拷贝即可,COPY1表示指令的操作码占一个字节,<n>2表示要拷贝的字节数,占2个字节,<old_address>2表示要拷贝的字节在旧版本代码中的起始地址,所以COPY指令共占5字节。
本发明中的方法,如上所述,生成的新版本代码和旧版本代码完全一样,所以生成的增量描述文件只有一条COPY指令(COPY 10 4a00),表示从旧版本代码的4a00地址处拷贝10个字节,指令共占5个字节。
而背景技术,比较的是旧版本代码“0f 93 b0 12 40 53 b0 12 e6 4d”和新版本代码“0f93 b0 12 76 4e b0 12 e6 4d”,因此生成增量描述文件为:
COPY 4 4a00,表示从旧版本代码的4a00地址开始拷贝“0f 93b0 12”,占5字节;
ADD 2 76 4e,表示直接插入“76 4e”,占3+2=5字节;
COPY 4 4a06,表示从旧版本代码的4a06地址开始拷贝“b0 12e6 4d”,占5字节;
背景技术总共需要5+5+5=15字节,而本发明所描述的方法只需要5字节,所以本发明所描述的方法,能够增加要比较的新版本和旧版本代码之间的相同部分,提高了代码间的相似度,生成了更小的增量描述文件。

Claims (1)

1.一种基于代码相似度保持的嵌入式软件更新方法,其特征在于,包括:
通过新版本代码的地址空间生成位图段,并且,以所述位图段中的“1”表示新版本代码中的对应地址的指令包含引用且以位图段中的“0”表示新版本代码中的对应地址的指令不包含引用,或者以所述位图段中的“0”表示新版本代码中的对应地址的指令包含引用且以位图段中的“1”表示新版本代码中的对应地址的指令不包含引用;
将新版本代码中所有的引用目标地址生成一个新版本定位表,每个引用目标地址在所述新版本定位表中各有一个唯一的索引,然后将新版本代码中的各个引用目标地址分别替换成该引用目标地址在所述新版本定位表中的对应索引,生成代码段;
其中,所述“将新版本代码中所有的引用目标地址生成一个新版本定位表”的方法如下:
第一步,新建一个空的旧版本代码的定位表作为旧版本定位表,从旧版本代码的起始地址处按照地址递增的方向遍历旧版本代码的每一条指令的地址,判断每一条指令的地址是否是旧版本代码中的一个引用目标地址:如果是,则将相应指令的地址按遍历的先后顺序逐个添加到旧版本定位表中,如果不是,则不添加;
第二步,新建一个空的新版本代码的定位表作为所述新版本定位表,然后从新版本代码的起始地址处按照地址递增的方向逐个检查新版本代码的每一条指令的地址是否为新版本代码中的一个引用目标地址:
如果新版本代码的被检查的指令的地址是新版本代码中的一个引用目标地址,则判断在旧版本代码中是否存在与所述被检查的指令相同的指令,若存在,则根据该指令在旧版本代码中的地址找到其在旧版本定位表中的索引,然后在新版本定位表的相同索引位置处插入新版本代码的被检查的指令的地址;若不存在,则将新版本代码的被检查的指令的地址插入到新版本定位表的第一个空位置。
CN201410015803.4A 2014-01-14 2014-01-14 一种基于代码相似度保持的嵌入式软件更新方法 Active CN103777948B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201410015803.4A CN103777948B (zh) 2014-01-14 2014-01-14 一种基于代码相似度保持的嵌入式软件更新方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201410015803.4A CN103777948B (zh) 2014-01-14 2014-01-14 一种基于代码相似度保持的嵌入式软件更新方法

Publications (2)

Publication Number Publication Date
CN103777948A CN103777948A (zh) 2014-05-07
CN103777948B true CN103777948B (zh) 2017-01-04

Family

ID=50570230

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201410015803.4A Active CN103777948B (zh) 2014-01-14 2014-01-14 一种基于代码相似度保持的嵌入式软件更新方法

Country Status (1)

Country Link
CN (1) CN103777948B (zh)

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101425008A (zh) * 2007-11-01 2009-05-06 北京航空航天大学 基于编辑距离的源代码相似度度量方法
CN101697121A (zh) * 2009-10-26 2010-04-21 哈尔滨工业大学 一种基于程序源代码语义分析的代码相似度检测方法
CN101826027A (zh) * 2010-05-28 2010-09-08 深圳市融创天下科技发展有限公司 一种嵌入式系统及其升级方法
TW201123010A (en) * 2009-12-31 2011-07-01 Welink Solutions Inc Updating method of customized-design software source code.
CN104298526A (zh) * 2014-09-28 2015-01-21 北京畅游天下网络技术有限公司 一种软件更新方法和装置

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8225293B2 (en) * 2003-02-13 2012-07-17 Accurate Technologies Inc. Method for supporting calibration parameters in an ECU

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101425008A (zh) * 2007-11-01 2009-05-06 北京航空航天大学 基于编辑距离的源代码相似度度量方法
CN101697121A (zh) * 2009-10-26 2010-04-21 哈尔滨工业大学 一种基于程序源代码语义分析的代码相似度检测方法
TW201123010A (en) * 2009-12-31 2011-07-01 Welink Solutions Inc Updating method of customized-design software source code.
CN101826027A (zh) * 2010-05-28 2010-09-08 深圳市融创天下科技发展有限公司 一种嵌入式系统及其升级方法
CN104298526A (zh) * 2014-09-28 2015-01-21 北京畅游天下网络技术有限公司 一种软件更新方法和装置

Also Published As

Publication number Publication date
CN103777948A (zh) 2014-05-07

Similar Documents

Publication Publication Date Title
MY197480A (en) System and method for information protection
US20170177325A1 (en) Dynamic data difference generation and distribution
AU2003299969A1 (en) Method and system for computer aided manufacturing
CN108829746A (zh) 一种基于内存数据库的主数据管理系统及装置
CN105302591B (zh) 双mcu架构系统更新程序的通信方法
CN105205189B (zh) 基于容器的bim模型与高速采集数据系统的集成方法
CN104519072A (zh) 一种权限控制方法和装置
CN103777948B (zh) 一种基于代码相似度保持的嵌入式软件更新方法
WO2016092948A1 (ja) 車載装置、及び、地図データ管理システム
CN105591915A (zh) 一种路由表的维护方法和装置
CN105302616A (zh) 软件远程即时更新升级系统及方法
CN103077066B (zh) 一种编译时嵌入产品关键信息的方法和系统
CN103294799A (zh) 一种数据并行批量导入只读查询系统的方法及系统
CN109558159A (zh) 游戏中用户界面的更新方法和装置
CN104702508A (zh) 表项动态更新方法及系统
JP2015012802A5 (zh)
JP2018084958A (ja) 情報処理システム及び情報処理方法
CN102819535A (zh) 数据块迁移
CN103346901A (zh) 一种面向数据流处理的元组跟踪方法及系统
TW201619851A (zh) 適應性調整資料庫結構之方法與調整裝置
CN104598554A (zh) 网页页面加载方法及装置
CN108462761B (zh) 一种高效的传感网络地址配置方法
CN103793245A (zh) 一种嵌入式系统更新中增量文件的生成方法
US20230176855A1 (en) Method of generating rollback difference data of a vehicle controller and a method of rollback of a vehicle controller
JP2008293176A (ja) プラントコントローラ

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