一种智能电能表软件的可靠性检测仪及其检测方法转让专利

申请号 : CN201510980437.0

文献号 : CN105630678B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 严晶晶刘紫熠李祯祥葛嘉晖崔迎宾张晓雯张卫欣王庆江徐向阳张樱譞雷光远

申请人 : 国网天津市电力公司国网天津宝坻供电有限公司

摘要 :

本发明公开了一种智能电能表的软件可靠性检测仪及其检测方法。本仪器由WinCE操作系统的嵌入式设备,以及搭载了自主设计的智能电能表的软件可靠性检测软件组成。智能电能表的软件可靠性检测软件,运用软件可靠性分析以及反编译技术,设计的智能电能表软件可靠性的检测仪。该设备的功能是通过将智能电能表的二进制代码进行反汇编;再反编译为高级程序语言;最后对前面的反编译后的C语言进行静态结构基础上的软件可靠性检查。

权利要求 :

1.一种智能电能表软件的可靠性检测仪,其特征在于:包括嵌入式设备,该设备搭载了智能电能表软件的可靠性检测软件及数据库,可靠性检测软件通过将智能电能表的二进制代码进行反汇编、再反编译为C语言、最后对反编译后的C语言进行静态结构基础上的软件可靠性检查,找出C语言常规的错误,并且对错误定位提示,所述的软件可靠性检查包括函数调用分析、控制流分析、数据流分析,所述的函数调用分析,结合字符串的复合分割方法和多级存储空间,对电表相关的函数声明和调用进行准确的识别,产生可靠的函数调用信息,所述的控制流分析,在对程序各个分支进行抽象的基础上,对节点进行多级正反向遍历和关联,产生的结果通过调用Graphviz开源画图类生成清晰的控制流结构图,所述的数据流分析,根据变量定值到达关系,全程追踪电表敏感变量,结合函数调用信息和控制流图形成完整的故障分析图。

2.根据权利要求1所述的智能电能表软件的可靠性检测仪,其特征在于:所述嵌入式设备采用WinCE操作系统。

3.根据权利要求1所述的智能电能表软件的可靠性检测仪,其特征在于:所述的数据库为SQLiteDB。

4.根据权利要求1所述的智能电能表软件的可靠性检测仪,其特征在于:所述二进制代码为智能电能表MCU中的机器码。

5.根据权利要求1所述的智能电能表软件的可靠性检测仪,其特征在于:所述嵌入式设备采用7寸WINCE工业触摸式平板电脑WLT_T8048_070B,带有7寸TFT LCD,支持VS2005,VS2008下的VC++,VB,C#编程。

说明书 :

一种智能电能表软件的可靠性检测仪及其检测方法

技术领域:

[0001] 本发明涉及便携式嵌入式设备的技术,以及计算机学科中的固件逆向工程技术、反编译技术、软件可靠性分析技术。背景技术:
[0002] 智能电能表作为嵌入式系统,现有研究对其软件质量的可信监督略显不足。通过对智能电能表的故障定位分析,建立智能电能表的硬件运行状态预警机制,可以及时消除智能电能表故障隐患,切实提高智能电能表的质量水平。目前的智能电能表的监控主要采用的方法有:1、基于黑盒测试的智能电能表软件检测方法,基于黑盒测试的智能电能表的软件测试,不能准确定位软件的缺欠的位置,以及分析出故障产生的原因。2、采用针对嵌入式软件的动态插桩技术。这种方法需要知道智能电能表的原始高级语言的程序,这对电能表的表厂的知识产权的影响很大,并且会导致代码的大量膨胀,影响智能电能表的运行。
[0003] 综上所述,现有的智能电能表的软件可靠性检测存在的问题是:1、仅适用于已知原始电能表的高级语言的程序,智能电能表的表厂因为知识产权的关系,会不配合。2、代码的膨胀太严重,受嵌入式设备的硬件限制,智能电能表运行不正常。3、不能准确知道智能电能表的故障原因以及对故障进行定位。4、没有一种轻巧的设备,可以方便地直接对读取的机器码进行翻译与检测,让工作人员易于携带以及方便使用减轻操作人员的负担。发明内容:
[0004] 本发明目的是针对上述问题,提供一种减轻劳动强度、易于携带的针对智能电能表机器码的对智能电能表软件可靠性,进行检测的嵌入式智能电能表软件检测仪及其检测方法。
[0005] 为实现上述目的,我们设计了如下的技术方案:
[0006] 一种智能电能表的软件可靠性检测仪,包括具有WinCE操作系统的嵌入式设备,以及搭载了自主设计的智能电能表软件的可靠性检测软件,其特征:嵌入式设备提供智能电能表软件可靠性检查软件运行的硬件平台,数据库SQLiteDB为软件的中间结果提供了存储。自主研发的智能电能表软件的可靠性检测软件,可以实现智能电能表软件的基于机器码的可靠性检测。可靠性检测软件运用可靠性分析以及反编译技术,通过将智能电能表的二进制代码进行反汇编;再反编译为高级程序语言(C语言);最后对前面的反编译后的C语言进行静态结构基础上的软件可靠性检查。
[0007] 而且,所述的智能电能表的软件可靠性检测软件为自主研发的基于智能电能表MCU中的机器码进行软件可靠性测试。
[0008] 而且,所述嵌入式设备采用7寸WINCE工业触摸式平板电脑WLT_T8048_070B,带有7寸TFT LCD,支持VS2005,VS2008下的VC++,VB,C#编程。
[0009] 而且,所述的软件可靠性检查包括函数调用分析、控制流分析、数据流分析。
[0010] 所述的函数调用分析,结合字符串的复合分割方法和多级存储空间,对电表相关的函数声明和调用进行准确的识别,产生可靠的函数调用信息。
[0011] 所述的控制流分析,在对程序各个分支进行抽象的基础上,对节点进行多级正反向遍历和关联,产生的结果通过调用Graphviz开源画图类生成清晰的控制流结构图。
[0012] 所述的数据流分析,根据变量定值到达关系,全程追踪电表敏感变量,结合函数调用信息和控制流图形成完整的故障分析图。
[0013] 本发明的优点和积极效果是:
[0014] 1.本智能电能表的软件可靠性检测仪包括由智能电能表的软件可靠性检测软件,及其嵌入式硬件和WinCE操作系统。当输入智能电能表MCU中的智能电能表程序的机器码时,能够进行反汇编以及反编译,再对反编译后的高级语言的程序进行软件的静态结构分析以及软件可靠性分析,解决了智能电能表不知道高级语言源代码的情况下软件的可靠性分析以及错误定位。
[0015] 2.本智能电能表的软件可靠检测仪,可以用于检测采用主流嵌入式MUC的智能电能表软件,包括有瑞萨,NEC等。具有使用方便,通用性强的特点。
[0016] 3.本发明检测仪具有体积小,携带以及使用方便,通用性强的特点,可以用于多种主流的智能电能表。

附图说明

[0017] 图1为本检测仪的示意图;
[0018] 图2为本检测仪所搭载的可靠性检测软件的设计流程图。

具体实施方式

[0019] 以下结合附图对本发明实施例做出进一步阐述:
[0020] 本智能电能表的软件可靠性检测仪,包括具有WinCE操作系统的嵌入式设备,以及搭载了自主设计的智能电能表软件的可靠性检测软件组成,其特征:嵌入式设备提供智能电能表软件可靠性检查软件运行的硬件平台。数据库SQLiteDB,为软件的中间结果提供了存储。自主研发的智能电能表的软件可靠性检测软件,可以实现智能电能表软件的基于机器码的可靠性检测。可靠性检测软件,运用软件可靠性分析以及反编译技术,通过将智能电能表的二进制代码进行反汇编;再反编译为高级程序语言;最后对前面的反编译后的C语言进行静态结构基础上的软件可靠性检查。采用的嵌入式设备型号:7寸WINCE工业触摸式平板电脑WLT_T8048_070B。
[0021] 本智能电能表软件可靠性检测仪的特点是:搭载的我们自主研发的电能表软件可靠性检测软件,是基于程序的静态结构分析的,能准确定位软件的缺欠的位置,以及分析出智能电能表典型故障产生的原因。另外本设计是基于智能电能表机器码进行反汇编反编译的,所以无需知道智能电能表的原始高级语言的程序,对电能表的表厂的知识产权的影响很小,不同于动态插桩技术并且会导致代码的大量的膨胀,自主研发的软件不会影响智能电能表的运行。嵌入式设备轻巧,可以方便地直接对读取的机器码,进行与检测,造成了工作中的沉重的人员负担。
[0022] 本智能电能表软件可靠性检测仪的工作过程为:点击“机器码导入”读入智能电能表MCU中的机器码;点击“源码”,可以看到导入智能电能表MCU的机器码;再然后点击“反汇编”,可以看到刚才读进来的机器码的反汇编的结果;再点击“反编译”,可以看到机器码经过反汇编反编译后的高级语言的结果;点击“数据流图”,可以看到原始程序的进一步分析后的数据流图;点击“控制流图”,可以看到程序的进一步的控制流图;再点击“可靠性分析”,可以看到智能电能表软件可靠性分析结果;点击“退出”,程序就返回。嵌入式设备提供智能电能表软件可靠性检查软件运行的硬件平台。数据库SQLiteDB为软件的读入的机器码,中间转化的反汇编结果,以及中间转化的反编译结果,以及最后转化的可靠性检测的结果提供了存储。
[0023] 下面以一个智能电能表软件可靠性检测仪加以说明:嵌入式设备提供智能电能表软件的可靠性检查软件运行的硬件平台。嵌入式设备,采用7寸WINCE工业触摸式平板电脑WLT_T8048_070B,带有7寸TFT LCD,支持VS2005,VS2008下的VC++,VB,C#编程,WindowsCE操作系统。数据库SQLiteDB为软件读入的机器码,中间转化的反汇编结果,中间转化的反编译结果,最后转化的可靠性检测结果提供存储。自主研发的智能电能表软件的可靠性检测软件,可以实现智能电能表软件的基于机器码的可靠性检测。
[0024] 为了验证智能电能表软件可靠性检测仪,我们对该仪器进行了采用了MCU芯片为MSP430,RENESAS78K/0和INTEL8051机器码读入,反汇编,反编译,以及软件的可靠性检测的验证。
[0025] 机器码的读入试验:试验时,分别读入MSP430,RENESAS78K/0和INTEL8051的txt文本格式的机器码,未发现任何异常。
[0026] 机器码的反汇编试验:试验时,分别读入MSP430,RENESAS78K/0和INTEL8051的txt文本格式的机器码,进行反汇编。三种机器码都被翻译为各自指令集的汇编语言,未发现任何异常。
[0027] 汇编语言的反编译试验:试验时,分别对MSP430,RENESAS78K/0和INTEL8051的txt文本格式的机器码反汇编后的汇编语言,进行逆向反编译。三种汇编指令都被反编译为C语言,未发现任何异常。
[0028] 基于机器码的软件可靠性验证性试验:试验时,分别对MSP430,RENESAS78K/0和INTEL8051的txt文本格式的机器码反汇编反编译后的C语言进行软件可靠性验证,其验证方法为:
[0029] 读取C语言代码的txt格式文件,通过预处理形成已基本块为单位的代码流节点。预处理的主要作用是滤除无用的字符(换行符、空格、制表符、注释等)。代码流节点存储了每行代码的内容、类型、嵌套深度等属性。其中类型包括关键字、表达式、变量声明、赋值、函数定义和调用等。嵌套深度用于控制流分析的父子节点关联和数据流分析中找出前驱和后继节点。
[0030] 控制流分析:
[0031] 1.定义控制流节点数组fun[],获取上述代码流节点中的控制信息(关键字、deep);
[0032] 2.调整控制流节点,包括提取关键字有效字符、关联语句等操作;
[0033] 3.根据节点各自的嵌套深度,为每个节点添加双亲和孩子节点,形成初步的控制流节点树;
[0034] 4.修改所有的循环子树,将循环子树中的非循环子节点中的叶子节点指向循环头部;
[0035] 5.确定if、switch、while、for等关键字的结束位,形成完整的控制流节点树;
[0036] 6.根据上述操作形成的节点树,绘制控制流图;
[0037] 数据流分析:
[0038] 通过对上述代码流节点的遍历,可以识别出每个节点所包含的变量定值之集、注销变量之集、活跃变量之集、注销活跃性变量之集等,并结合数据流方程,推导出每个节点分别产生和使用了哪些变量,从而判断待测程序是否出现变量定义了未使用、变量未初始化而使用导致结果不确定以及变量重复定义等情况。
[0039] 另外,通过识别数组和指针的声明,获得其最大长度,并跟踪其索引,从而检测出数组或指针的越界问题。
[0040] 函数调用分析:
[0041] 遍历代码流节点中保留的内容,当遇到小括号‘(’时,将括号之前的字符串按空格分割,形成子字符串数组。判断第一个字符串是否为基本类型,是则表明出现了函数声明(包括main函数),并将函数名及id保存;如不为基本类型,且没有分割所需的空格,则查询已保存的函数声明,查询成功则说明该语句为函数调用语句。将该调用语句的函数名及位置压入栈中,并在控制流图中添加调用位置(函数调用点)指向函数声明位置的箭头。当函数执行完毕时,将函数结束位指向函数调用点的下一位置(函数返回点),并将栈中函数相关内容弹出。
[0042] 根据上述策略,本软件能够正确查找出C语言常规的错误以及加载的黑白屏和电池欠压的错误,并且对错误能够定位提示,未发现任何异常。
[0043] 综上所述,本智能电能表软件可靠性检测仪,能够稳定方便快捷的对电能表软件的基于机器码的可靠性检测。并且对多种主流智能电能表兼容性强。设备搭载的自主研发的可靠性检测软件,可以实现软件可靠性分析以及机器码的反编译。通过将智能电能表的二进制代码进行反汇编;再反编译为高级程序语言;最后对前面的反编译后的C语言进行静态结构基础上的软件可靠性检查。数据库SQLiteDB,为软件的中间结果提供了存储。
[0044] 需要强调的是,本发明所述的实施例是说明性的,而不是限定性的,因此本发明并不限于具体实施方式中所述的实施例,凡是由本领域技术人员根据本发明的数据方案得出的实施方式,同样属于本发明的保护范围。