一种嵌入式软件的源代码级错误检测方法技术

技术编号:19933972 阅读:32 留言:0更新日期:2018-12-29 04:28
本发明专利技术公开了一种嵌入式软件的源代码级错误检测方法,包括:为每个函数分配唯一的静态函数标签FID;对每一个函数加参数df、参数S和参数ds;修改当前函数和被调用函数,在当前函数中修改被调用函数的参数,增加参数df、参数S和参数ds;在被调用函数更新基本块动态标签GS和全局函数动态标签GF、检测全局函数动态标签GF以及更新基本块动态标签GS;在函数调用返回后恢复全局函数动态标签GF。本发明专利技术通过单独的标签检测机制检测函数间的控制流错误,在此层面,对同一函数内到另一函数的多次调用不作区分,但通过函数内部的检测机制仍能检测出不同位置的调用错误。这样既简化了函数调用的控制流,又不会对检测能力造成影响。

【技术实现步骤摘要】
一种嵌入式软件的源代码级错误检测方法
本专利技术涉及嵌入式基础软件平台
,具体的说,是一种嵌入式软件的源代码级错误检测方法。
技术介绍
在嵌入式系统中,应用软件运行的硬件资源十分有限,对软件加固的开销限制极为严格,传统的加固方法,大多在指令级研究实现,并且时空开销均较大。因此,需要探索新的软件加固技术解决方案,在时空开销要求严格、可靠性要求高的前提下开展,在加固部分与未加固部分之间能够实现相互调用和协同操作。目前尚无这方面的解决方案。
技术实现思路
本专利技术的目的在于提供一种嵌入式软件的源代码级错误检测方法,用于解决函数间的控制流错误的检测问题。本专利技术通过下述技术方案解决上述问题:一种嵌入式软件的源代码级错误检测方法,包括:步骤S1:为每个函数分配唯一的静态函数标签FID;步骤S2:对每一个函数进行修改参数表,增加参数df、参数S和参数ds;其中,df为函数标签差异值,S为函数调用前一基本块的静态标签,ds为基本块标签差异值;步骤S3:修改当前函数和被调用函数,在当前函数中修改被调用函数的参数,增加所述参数df、参数S和参数ds;在被调用函数的开始处更新基本块动态标签GS、全局函数动态标签GF;在被调用函数的结尾处检测全局函数动态标签GF以及更新基本块动态标签GS;在函数调用返回后恢复全局函数动态标签GF。原理:函数间的控制流虽然复杂,但函数返回后的后继块,一定是函数调用语句之后的第一个基本块。根据这一特点,被调用函数返回后的下一基本块可以在函数调用时动态确定,避免了不能预知函数后继块的问题。为每个函数建立静态标签FID,并对每一个函数进行修改参数,增加了三个整型参数,df是根据当前函数或主函数静态函数标签FID_FUNC1与被调用函数的静态函数标签FID_FUCN2之间的异或运算结果值,ds是函数调用语句的上一个基本块PRE_BLOCK的静态标签S_PRE与函数调用语句(函数调用语句本身也是一个基本块)静态标签S_FUNC之间的差异值,通过在当前函数中插入语句1,增加参数对参数表进行修改,在被调用函数中插入语句2和语句3,其中语句2用于将基本块动态标签置0,以便于进行函数内部的标签检测,语句3用于更新全局的动态函数标签。在被调用的函数的结尾处插入语句4和语句5,其中语句4用于检测全局函数动态标签与被调用函数标签是否相等,语句5用于更新基本块动态标签。在函数调用返回当前函数后增加语句6,语句6用以回复全局函数动态标签。通过单独的标签检测机制检测函数间的控制流错误,在此层面,对同一函数内到另一函数的多次调用不作区分,但通过函数内部的检测机制仍能检测出不同位置的调用错误。这样既简化了函数调用的控制流,又不会对检测能力造成影响。采用单独的标签检测机制检测函数间的控制流,在软件加固中,可以实现加固部分与未加固部分之间的相互调用和协调操作。进一步地,所述步骤S2中的df=FID_FUNC1⊕FID_FUNC2,其中FID_FUNC1表示当前函数的静态函数标签,FID_FUNC2表示被调用函数的静态函数标签;所述ds=S_PRE⊕S_FUNC,其中S_PRE表示函数调用语句的上一个基本块PRE_BLOCK的静态标签,S_FUNC表示函数调用语句的静态标签。进一步地,所述步骤S3具体包括:步骤S31:在当前函数修改被调用函数的参数表,增加所述参数df、参数S和参数ds;步骤S32:在函数入口处增加基本块标签更新语句和函数标签更新语句;步骤S33:对当前函数内部的每一条函数调用语句,执行下列操作:步骤S331:计算当前函数的静态标签FID_FUNC1与被调用函数的静态标签FID_FUNC2的差异值df;步骤S332:计算函数调用语句上一基本块PRE_BLOCK的静态标签S_PRE与函数调用语句静态标签S_FUNC之间的标签差异值ds;步骤S333:被调用函数执行参数调整后的语句,在函数返回前,插入用于检查错误的标签检测语句和用于恢复调用函数前数值的基本块标签恢复语句;步骤S334:在函数返回处添加函数标签恢复语句。进一步地,所述标签检测语句为:check(GF==FID_FUNC);所述基本块标签恢复语句为:GS=GS+S_LAST+S+ds,其中,S_LAST为最后一个基本块LAST_BLOCK的静态标签。本专利技术与现有技术相比,具有以下优点及有益效果:(1)本专利技术通过单独的标签检测机制检测函数间的控制流错误,在此层面,对同一函数内到另一函数的多次调用不作区分,但通过函数内部的检测机制仍能检测出不同位置的调用错误。这样既简化了函数调用的控制流,又不会对检测能力造成影响。(2)本专利技术是在源代码级探索新的软件加固技术解决方案,在时空开销要求严格、可靠性要求高的前提下开展,在加固部分与未加固部分之间能够实现相互调用和协同操作。附图说明图1为本专利技术的标签检测示例图。具体实施方式下面结合实施例对本专利技术作进一步地详细说明,但本专利技术的实施方式不限于此。实施例1:结合附图1所示,一种嵌入式软件的源代码级错误检测方法,包括:步骤1:为每个函数分配唯一的静态标签FID;步骤2:对每个函数执行步骤3和步骤4;步骤3:修改函数的参数表,增加3个整型参数df,s和ds,分别用来接受传入的函数标签差异值df、函数调用前一基本块的静态标签s以及基本块标签差异值ds,进入步骤4;步骤4:在函数入口处插入两条语句:本块标签更新语句GS=GS+s;函数标签更新语句GF=GF+df;检测是否每个函数均完成参数表的修改,若是,则进入下一步,否则返回步骤3;步骤5:对当前函数内部的每一条函数调用语句,执行(1)~(4);(1)计算出当前函数FUNC1与被调用函数FUNC2的静态标签差异值df=FID_FUNC1⊕FID_FUNC2;(2)计算出函数调用语句上一基本块PRE_BLOCK的静态标签S_PRE与函数调用语句(函数调用语句本身也是一个基本块)静态标签S_FUNC之间的标签差异值ds=S_PRE⊕S_FUNC;(3)调整函数调用语句,加入3个实参值:df,S_PRE和ds;(4)在函数调用语句后,添加函数标签恢复语句GF=GF+df;检测是否每个函数均完成上述步骤,若是,则进入步骤6,否则返回(1);步骤6:在函数返回前,插入两条语句:标签检测语句check(GF==FID_FUNC);基本块标签恢复语句GS=GS+S_LAST+s+ds;其中,check语句用于检测条件是否成立,如果成立则继续运行,如果不成立则检查出错误。语句1中的3个参数均可以静态确定。在被调用函数的开始处插入语句2和3,语句2的目的是将基本块动态标签置0以便于进行函数内部的标签检测,语句3利用df值更新全局的动态函数标签。在被调用函数结尾处插入语句4和5,语句4检测全局的动态标签GF与被调用函数标签是否相等,语句5更新全局的基本块动态标签GS。在函数调用返回后增加语句6,恢复全局函数动态标签。尽管这里参照本专利技术的解释性实施例对本专利技术进行了描述,上述实施例仅为本专利技术较佳的实施方式,本专利技术的实施方式并不受上述实施例的限制,应该理解,本领域技术人员可以设计出很多其他的修改和实施方式,这些修改和实施方式将落在本申请公开的原则范围和精神之内。本文档来自技高网...

【技术保护点】
1.一种嵌入式软件的源代码级错误检测方法,其特征在于,包括:步骤S1:为每个函数分配唯一的静态函数标签FID;步骤S2:对每一个函数进行修改参数表,增加参数df、参数S和参数ds;其中,df为函数标签差异值,S为函数调用前一基本块的静态标签,ds为基本块标签差异值;步骤S3:修改当前函数和被调用函数,在当前函数中修改被调用函数的参数,增加所述参数df、参数S和参数ds;在被调用函数的开始处更新基本块动态标签GS、全局函数动态标签GF;在被调用函数的结尾处检测全局函数动态标签GF以及更新基本块动态标签GS;在函数调用返回后恢复全局函数动态标签GF。

【技术特征摘要】
1.一种嵌入式软件的源代码级错误检测方法,其特征在于,包括:步骤S1:为每个函数分配唯一的静态函数标签FID;步骤S2:对每一个函数进行修改参数表,增加参数df、参数S和参数ds;其中,df为函数标签差异值,S为函数调用前一基本块的静态标签,ds为基本块标签差异值;步骤S3:修改当前函数和被调用函数,在当前函数中修改被调用函数的参数,增加所述参数df、参数S和参数ds;在被调用函数的开始处更新基本块动态标签GS、全局函数动态标签GF;在被调用函数的结尾处检测全局函数动态标签GF以及更新基本块动态标签GS;在函数调用返回后恢复全局函数动态标签GF。2.根据权利要求1所述的一种嵌入式软件的源代码级错误检测方法,其特征在于,所述步骤S2中的df=FID_FUNC1⊕FID_FUNC2,其中FID_FUNC1表示当前函数的静态函数标签,FID_FUNC2表示被调用函数的静态函数标签;所述ds=S_PRE⊕S_FUNC,其中S_PRE表示函数调用语句的上一个基本块PRE_BLOCK的静态标签,S_FUNC表示函数调用语句的静态标签。3.根据权利要求2所述的一种...

【专利技术属性】
技术研发人员:姚天问张波陈华钟敏谢黛茜张奔
申请(专利权)人:四川航天系统工程研究所
类型:发明
国别省市:四川,51

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1