一种智能电表的软件一致性检测方法_4

文档序号:9325767阅读:来源:国知局
对应语句,故直接略去; 一个反编译的步骤:反编译的目的是进行中间语言到C语言的转换,分为前端,数据流 分析和后端; 一个代码结构分析的步骤:完成对反编译产生的高级语言中的代码结构的抽象化,BP 所谓的控制流分析;其实现过程包括:产生一组包含各类信息的节点结构的中间文件解析 模块、在画布特定位置绘制相应的图形,矩形或者菱形的函数绘制模块、将函数绘制模块绘 制出来的图形,按照特定的规则连接起来,从而形成控制流图函数连线模块;具体方法是: 步骤1 :由中间文件解析模块产生一组包含各类信息的节点结构,详细步骤如下: 步骤I. 1 :打开输入文件,获取输入文件流;通过调用C++中库函数fopen (),并选择rt 模式,即打开文本文件,允许读与写; 步骤1. 2 :初始化节点信息; 步骤1. 3 :解析文件的输入流,以while语句进行遍历,直至遍历至文件结束标记符; 步骤1. 4 :在遍历时,碰到换行符时将节点中funid属性加一,并且记录每一行的起始 的空格数目,并将结果作为节点的deep属性; 步骤1. 5 :调用私有函数GetName获取每个节点的名字;在GetName函数中我们需要特 殊处理含有if, switch, while, else关键字的节点;在遍历到此类节点的时候,我们去除 这些关键字,而只留下剩余的信息,即判断条件;与此同时,修改节点中的type信息,根据 关键字的不同,修改为 IFTYPE, WHILETYPE, SWITCHTYPE, ELSETYPE; 步骤1. 6 :为ELSETYPE类型的节点找到与其配对的IFTYPE类型的节点; 步骤1. 7 :为节点添加父节点和孩子节点信息;其中获取孩子节点信息的方法为,向下 遍历,直到碰到深度比本节点小于等于的节点则停止遍历,否则将深度比自己大一的节点 加入孩子节点数组;获取其父节点信息的方法为,向上遍历,直到找到第一个深度小于本节 点的函数节点,则为双亲节点; 步骤I. 8 :IF、WHILE、SWITCH模块结束位置确定;中间文件解析后,产生的结果为一组 包含各类信息的节点结构; 步骤2 :函数绘制模块在画布特定位置绘制相应的图形,矩形或者菱形,详细步骤如 下: 步骤:2. 1 :遍历经过中间文件解析模块后的节点信息,当此节点拥有孩子节点并且此 节点的类型为FUNTYPE时,将此节点作为新的一行的起始节点; 步骤2. 2 :计算每一行起始节点的Y轴方向的偏移量;这个偏移量由两个方面的因 素所主导;其一,起始行节点的序列;其二,在此节点之前,若其他行中含有IFTYPE节点, ELSETYPE节点,WHILETYPE节点,SWITCHTYPE节点,那么需特别计算偏移量,因为以上这些 节点都会在Y轴方向存在增量; 步骤2. 3 :计算新行首节点之后,绘制首节点图像,即矩形; 步骤2. 4 :将首节点位置信息,填入状态信息结构体中; 步骤2. 5 :在步骤三绘制的矩形框中间添加函数名称信息; 步骤2. 6 :遍历新行的首节点的子孩子节点,绘制子孩子节点形状; 步骤2. 7 :绘制子孩子节点时,首先确定子孩子节点的位置信息,其次判断子孩子节 点的类型信息;子孩子节点的位置信息也会由其之前的IFTYPE节点,ELSETYPE节点, WHILETYPE节点,SWITCHTYPE节点所影响,例如ELSETYPE类型的节点会出现在下面的一行 中,因此ELSETYPE类型节点的子孩子,不应该算在偏移量中;确定位置信息之后,为孩子节 点添加名称; 步骤3 :函数连线模块将函数绘制模块绘制出来的图形,按照特定的规则连接起来,从 而形成控制流图,详细步骤如下: 步骤:3. 1 :寻找每一行的起始节点,并将起始节点的出口坐标传递; 步骤3. 2 :遍历起始节点的孩子节点;子孩子节点可能有五种情况,分别是:IFTYPE, WHILETYPE,ELSETYPE,SWITCHTYPE,FUNCTYPE,具体是: 条件情况一 :IFTYPE情况下分为两部分,原因是IFTYPE和ELSETYPE不一定成对出 现;在IFTYPE情况下,首先将IFTYPE节点与传递进来的出口坐标相连,接下来对IFTYPE节 点的子孩子进行遍历,遍历之后获取最后一个节点的横坐标,并将该横坐标值与IFTYPE节 点中标记的终止节点相连接;其次处理不含有ELSETYPE节点的IFTYPE节点;先计算此IF 块中含有多少个IFTYPE,多少个WHILETYPE,以及多少个SWITCHTYPE ;将这作为转折点的纵 坐标偏移量;并将此转折点与IFTYPE节点菱形的下部节点相连,代表着不满足IFTYPE节点 的路径; 条件情况二:WHILETYPE情况下,首先将WHILETYPE节点与传递进来的出口坐标相 连,接下来对WHILETYPE节点的子孩子进行遍历,遍历之后获取最后一个节点的横坐标,并 将该横坐标值与WHILETYPE节点中标记的终止节点相连接;其次在WHILETYPE类型的菱形 节点的上部作为一个出口节点,接下来计算WHILETYPE类型节点函数域内是否包含有其他 WHILETYPE类型节点,以及这些节点的数目;将WHILETYPE节点的数目作为偏移量,从而在 菱形上部确定转折点纵坐标位置,此条连线代表不满足判断条件所走路径;在菱形下部的 顶点引出一条折线,代表在满足条件之后返回WHILETYPE节点,再次进行判断条件; 条件情况三:ELSETYPE情况下,首先找到与其配对的IFTYPE节点,在找到与其配对的 IFTYPE节点之后,再次计算IFTYPE节点块中含有多少个IFTYPE,多少个WHILETYPE,以及多 少个SWITCHTYPE,以这些作为偏移量在IFTYPE节点的下方确定ELSETYPE节点的坐标;接 下来将ELSETYPE节点与IFTYPE菱形节点的下部相连接;随后遍历ELSETYPE节点的子孩子 节点; 条件情况四:SWITCHTYPE情况下,首先将SWITCHTYPE节点与传递进来的出口坐标相 连接,接下来对SWITCHTYPE节点的子孩子进行遍历,遍历之后,获取最后一个节点的横坐 标值,并将横坐标值与SWITCHTYPE节点中标记的终止节点相连接; 条件情况五:FUNTYPE情况下,直接将上一节点传递进来的出口坐标,与自身的入口 坐标相连接,并将本节点的出口坐标传递出去; 一个软件差异率分析的步骤:对于两块不同的智能电表,考察其软件功能差异时,将 程序内部调用关系图抽象为树或者图,这样对程序的差异比较转化为对两个树形结构的比 较;具体的度量方法如下:将程序抽象为两个树形结构A和B,其中顶点V表示函数,边E表 示函数调用关系;分别统计两棵树的顶点个数和边的个数;两端程序的差异率P可以用树 A和树B的差异率Tr (p)表示;设定阈值T=20%,若Tr (p)〈T,则认为两段程序功能一致;若 Tr (p) >T,则认为两段程序功能存在差异。2. 根据权利要求1所述的一种智能电表的软件一致性检测方法,其特征在于,所述反 编译的步骤具体包括以下子步骤: 步骤1,判断输入汇编代码的完整性:对于反编译器,输入的中间指令代码遵循固定的 格式,如图3所示;如果输入的中间指令代码不遵循这个格式,可以认为输入只是一个小程 序段,而不是完整的电表代码; 步骤2,生成控制流图:这一步的目的是为源程序构造一个调用图,并且为程序的每个 子程序构造一个基本块控制流向图;简而言之,这一步的目的是把中间代码分成多个结构, 即划分函数以及调用关系; 步骤3,优化中间代码,产生C文件,C文件用于作为步骤4的输入:中间代码优化主要 指的是清除无关指令,清除掉低级语言概念之条件码、寄存器和中间过渡的指令,并引进多 于两个操作数的表达式高级概念;这一步产生的代码是高级汇编代码,已看不出汇编的语 法痕迹,但是还不是C语言代码;这一步的各个步骤如下: 3. 1死寄存器清除 如果一个变量的数值在它定义之后没有被使用,那么在程序中该标识符此时是死的; 可以认为,定义一个死的标识符的指令是无用的,因此可以从代码中被清除掉; 3. 2死条件码清除 类似于死寄存器清除; 3. 3寄存器变量清除 用变量代替寄存器,一个例子如图4所示,原汇编指令中的寄存器SI和DI被局部变量 Iocl和loc2代替; 步骤4,数据流分析:数据流分析的目的是在中间代码基础上进行优化代码的转换,反 编译器需要在整个程序中收集关于寄存器和条件码的信息,并且跨不同的基本块传播该信 息;该信息的收集是通过一个数据流分析过程,即求解方程式系统一一与该程序不同点上 的信息相关联的方程式; 步骤5,优化中间代码,产生D文件,D文件用于作为步骤6的输入:这一步的目的就是 在第4步分析完毕之后,生成转换后的代码D文件; 步骤6,控制流分析:在第2步已经有了控制流图,相当于函数或者调用关系,但却没有 关于高级语言控制结构的信息,比如if. .. then. .. else、while ()、case等;这一步的目的 是通过一个结构化算法能够被转换成一个结构化的高级语言图; 步骤7,生成C语言:这一步就是在第6步的基础上将低级的结构转换成高级的if…… then等C语言结构。
【专利摘要】本发明涉及一种智能电表的软件一致性检测方法,主要以计算机学科中的固件逆向工程技术、反汇编和反编译技术、嵌入式系统设计技术为指导理论,针对智能电表在生产过程中出现的样品表和批量表运行时差异问题,深入分析了表征电表运行差异的内部核心代码,进而通过反汇编和反编译手段实现了两种类型电表的软件一致性检测。利用本发明的方法可以有效解决不同的智能电表的软件一致性问题。例如:在维护电力企业已使用电表时,使用本发明中的方法,可以控制拟投产电表与已使用电表功能和质量误差在±20%范围内。
【IPC分类】G01R35/04
【公开号】CN105044653
【申请号】CN201510371954
【发明人】刘金硕, 王谢兵, 张卫欣, 江庄毅, 邓娟, 郑稳, 章岚昕
【申请人】武汉大学
【公开日】2015年11月11日
【申请日】2015年6月30日
当前第4页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1