一种控制流错误检测方法

文档序号:6638087阅读:225来源:国知局
一种控制流错误检测方法
【专利摘要】本发明提供了一种控制流错误检测方法,预先根据调用路径集合生成各模块校验码集合,运行时动态生成软件校验码,与当前模块校验码集合中各元素进行比对。本发明的软件控制流异常检测方法,可以有效检测和处理航天软件因软件代码区单粒子翻转、指令计数器异常等造成的控制流异常问题,实现简单且不需要额外硬件支持。本发明实现方法简单易行,几乎不需要任何额外的软硬件支持。可有效检测软件模块一级的控制流异常。
【专利说明】一种控制流错误检测方法

【技术领域】
[0001]本发明涉及检测方法,尤其涉及一种航天软件控制流异常检测方法。

【背景技术】
[0002]航天软件经常需要面对因单粒子等空间环境导致软件代码控制流执行错乱的问题。宇航专用的CPU和内存普遍在硬件层面提供了针对单粒子事件的纠检错手段,但随着民用货架产品和器件在航天领域越来越广泛地获得应用,依靠纯软件手段来应对空间环境造成的软件异常越发必要。
[0003]传统上应对代码控制流异常的办法主要有硬件看门狗和EDAC (Error Detect1nAnd Correct1n,错误检测与纠正)技术等。
[0004]硬件看门狗是由计算机硬件提供的一种系统异常处理机制,通常包括一个看门狗计数器,该计数器在初始化之后其计数值会随着时间不断累加,一旦到达系统设定的最大值会导致计算机硬件复位(称为“狗咬”),应用软件代码会周期性的对该计数器清零(称为“喂狗”操作),来防止狗咬发生。一旦因某些软硬件异常导致软件无法按时喂狗,计算机将会复位重启,从而来令整个系统恢复正常。
[0005]EDAC错误检测与纠正技术是由航天专用星载计算机硬件提供的有效抵御单粒子的手段。计算机硬件会自动为存储器中的数据生成校验码,当这些数据内容被改写时其对应的校验码也会被计算机硬件自动改写。当应用软件从存储器中读取数据时,计算机硬件会自动地将读取出来的数据与其校验码进行匹配,一旦检测到少量比特错误(如Ibit或2bit错误)则会自动对数据进行更正,若检测到无法更正的多比特错误,则会令星载计算机复位。该方法可对存储软件代码的存储器进行保护,从而有效防止软件代码异常变化造成的软件控制流异常。
[0006]此外,近年来也有学者提出了一些仅依靠纯软件方法来进行控制流异常检测的方法,但普遍较为复杂,且需要对编译器进行改造,在编译期间在特定代码段自动插入某些机器指令,其实现难度较大,一般企业很难具备改写编译器这样的能力。
[0007]看门狗的本质作用是预防计算机死锁或任务执行超时,能够在指定时间内执行“喂狗”操作并不一定意味着软件控制流未出现问题。EDAC内存校验效果虽好,但需要硬件支持,民用芯片通常无此功能。为降低微小卫星研制成本和研制门槛,目前民用货架器件已经被大量应用于卫星之上,在不具备硬件EDAC功能的条件下提高软件任务的可靠性无疑具有重要意义。


【发明内容】

[0008]为了解决现有技术中问题,本发明提供了一种控制流错误检测方法,步骤如下:
[0009]步骤1:列出所有软件模块之间的扇入、扇出关系,生成调用关系图,其中Fl为最顶层模块,它代表软件的程序入口,被上一级软件模块调用称为扇入模块,调用下一级软件模块称为扇出模块;
[0010]步骤2:对每个软件模块编制相应数字签名,用S来表示,同一软件内各模块的数字签名不可重复;
[0011]步骤3:对每个模块自底向上遍历所有扇入模块,获得由最顶层模块到该模块的所有可能的调用路径,从而形成该模块的调用路径集合;
[0012]步骤4:利用最顶层模块到本模块调用路径上各模块的数字签名,采用统一规则函数H生成各模块校验码集合并进行预存储,校验码集合中的每个校验码与之前形成的校验路径集合中的各路径一一对应;规则函数H满足如下性质:
[0013]性质IH(H(Si,Sj),Sk) = H(Si,Sj, Sk);
[0014]步骤5:编写代码时,需将本模块当前校验码传入下一级调用模块,并在每个模块头部进行校验码计算和比对,如果当前校验码计算值不在预先存储的本模块校验码集合之内,则调用异常处理;一旦发生校验码计算值不在本模块校验码集合之内的情况时,则发现软件控制流异常,此时可执行异常处理程序。
[0015]作为本发明的进一步改进,步骤I采用软件静态分析工具对软件源文件扫描分析生成调用关系图。
[0016]作为本发明的进一步改进,步骤2中,数字签名采用无符号数表示。
[0017]作为本发明的进一步改进,步骤4中,Fl因没有扇入,其校验码集合为{Cl},且有Cl = SI,即数字签名与校验码等值。
[0018]作为本发明的进一步改进,规则函数H使用累加和、异或和、奇偶校验或CRC校验码规则,只需满足性质I即可。CRC (Cyclic Redundancy Check)为循环冗余校验码,是数据通信领域中最常用的一种差错校验码
[0019]本发明的有益效果是:
[0020]本发明的软件控制流异常检测方法,可以有效检测和处理航天软件因软件代码区单粒子翻转、指令计数器异常等造成的控制流异常问题。本发明实现方法简单易行,几乎不需要任何额外的软硬件支持。可有效检测软件模块一级的控制流异常。

【专利附图】

【附图说明】
[0021]图1是本发明控制流差错示意图;
[0022]图2是本发明调用关系图示例。

【具体实施方式】
[0023]下面结合附图对本发明做进一步说明。
[0024]如图1所示,提供了控制流异常示意图,F1、F2、F3三个软件模块为顺序调用关系,因单粒子事件等异常导致程序代码区异常改变,软件控制流由F2错误地跳转到了无直接关联的F6,即发生了控制流异常。如何不依赖于硬件而仅凭借软件自身有效检测此类异常是本发明专利所要解决的问题。
[0025]本方法的具体实现步骤如下:
[0026]步骤1:列出所有软件模块(函数)之间的扇入、扇出关系,生成调用关系图,这一步骤可采用诸如TestBed等软件静态分析工具对软件源文件扫描分析来方便实现,图2给出了一个简单的调用关系图示例。其中Fl为最顶层模块,它代表软件的程序入口,例如C语言中的main函数,或航天软件的主任务调度函数。被上一级软件模块调用称为扇入模块,调用下一级软件模块称为扇出模块,例如F3存在一个扇入模块,即F1,同时存在三个扇出模块,即F6、F7和F8。
[0027]步骤2:对每个软件模块编制相应数字签名(用S来表示,例如F3的数字签名为S3),该数字签名可以采用无符号表示,也可采用其它形式,同一软件内各模块的数字签名不可重复。
[0028]步骤3:对每个模块自底向上遍历所有扇入模块,获得由最顶层模块到该模块的所有可能的调用路径,从而形成该模块的调用路径集合。例如由Fl到F6的可能调用路径集合为{F1F2F6,F1F6,F1F3F6}。
[0029]步骤4:利用最顶层模块到本模块调用路径上各模块的数字签名,采用统一规则函数H生成各模块校验码集合并进行预存储,校验码集合中的每个校验码与之前形成的校验路径集合中的各路径一一对应。例如F6的校验码集合为{C126,C16,C136},其中C126=H(S1,S2,S6),C16 = H(S1,S6),C136 = H(S1,S3,S6),而 Fl 因没有扇入,其校验码集合为{Cl},且有Cl = SI,即数字签名与校验码等值。注意,规则函数H必须满足如下性质:
[0030]性质IH(H(Si,Sj),Sk) = H(Si,Sj, Sk)。
[0031]步骤5:编写代码时,需将本模块当前校验码传入下一级调用模块,并在每个模块头部进行校验码计算和比对,如果当前校验码计算值不在预先存储的本模块校验码集合之内,则调用异常处理。例如由Fl调用F3再调用F6的这条路径,Fl先将自身校验码Cl传入F3中,F3在头部根据传入的校验码Cl和自身数字签名计算当前校验码,获得校验码计算值D 3 = H(C1,S3) =H(SI,S3) = C13。而F3的校验码集合为{C13},计算值在该集合内,校验通过;在?3调用F6时,将当前校验码C13传递给F6,在F6的头部计算校验码当前值,根据性质 I 有 D6 = H(C13, S6) = H (H (SI,S2),S6) = H(S1,S2,S6) = C126,亦在 F6 的校验码集合之内,校验通过。后续调用模块以此类推,一旦发生校验码计算值不在本模块校验码集合之内的情况时,则发现软件控制流异常,此时可执行异常处理程序。
[0032]实际使用中,规则函数H可使用累加和、异或和、奇偶校验、CRC校验码等多种规贝1J,只需满足性质I即可,开发人员可综合分析软件运行效率和错误检出率来选择最合适的校验码生成规则。
[0033]以上内容是结合具体的优选实施方式对本发明所作的进一步详细说明,不能认定本发明的具体实施只局限于这些说明。对于本发明所属【技术领域】的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干简单推演或替换,都应当视为属于本发明的保护范围。
【权利要求】
1.一种控制流错误检测方法,其特征在于,步骤如下: 步骤1:列出所有软件模块之间的扇入、扇出关系,生成调用关系图,其中Fl为最顶层模块,它代表软件的程序入口,被上一级软件模块调用称为扇入模块,调用下一级软件模块称为扇出模块; 步骤2:对每个软件模块编制相应数字签名,用S来表示,同一软件内各模块的数字签名不可重复; 步骤3:对每个模块自底向上遍历所有扇入模块,获得由最顶层模块到该模块的所有可能的调用路径,从而形成该模块的调用路径集合; 步骤4:利用最顶层模块到本模块调用路径上各模块的数字签名,采用统一规则函数H生成各模块校验码集合并进行预存储,校验码集合中的每个校验码与之前形成的校验路径集合中的各路径一一对应;规则函数H满足如下性质: 性质 IH(H(Si,Sj),Sk) = H(Si,Sj, Sk); 步骤5:编写代码时,需将本模块当前校验码传入下一级调用模块,并在每个模块头部进行校验码计算和比对,如果当前校验码计算值不在预先存储的本模块校验码集合之内,则调用异常处理;一旦发生校验码计算值不在本模块校验码集合之内的情况时,则发现软件控制流异常,此时可执行异常处理程序。
2.根据权利要求1所述的一种控制流错误检测方法,其特征在于:步骤I采用软件静态分析工具对软件源文件扫描分析生成调用关系图。
3.根据权利要求1所述的一种控制流错误检测方法,其特征在于:步骤2中,数字签名采用无符号数表示。
4.根据权利要求1所述的一种控制流错误检测方法,其特征在于:步骤4中,Fl因没有扇入,其校验码集合为{Cl},且有Cl = SI,即数字签名与校验码等值。
5.根据权利要求1所述的一种控制流错误检测方法,其特征在于:规则函数H使用累加和、异或和、奇偶校验或CRC校验码规则,只需满足性质I即可,CRC !Cyclic RedundancyCheck,为循环冗余校验码。
【文档编号】G06F11/10GK104461886SQ201410756465
【公开日】2015年3月25日 申请日期:2014年12月10日 优先权日:2014年12月10日
【发明者】寇义民, 李春, 刘宽俊, 潘乐, 尚华, 于小龙, 商明森 申请人:深圳航天东方红海特卫星有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1