更全的杂志信息网

一种基于标签的程序控制流错误检测方法

更新时间:2009-03-28

0 引 言

在现实生活中,嵌入式系统计算机受到诸如辐射、硬件故障、环境干扰等因素的影响,致使程序运行出现问题。该问题主要包括2个方面:数据流错误和控制流错误[1]。针对控制流程序错误,现在主要有3种检测方法:基于硬件检测[2]、基于软件检测[3]和软硬件结合检测[4]。硬件检测虽然指令冗余小,但需要修改硬件结构,难度大,成本高。相比基于硬件的检测,基于软件的控制流检测方法实现起来更加灵活。

目前,已经提出了很多有关程序控制流错误检测的软件方法,如ECCA[5](enhanced control-flow checking using assertions)、CFCSS[6](control flow checking by software signatures)、RSCFC[7](relationship signatures for control flow checking)、SCFC[8](software-based control flow checking)。RSCFC算法将程序划分为基本块,并对所有的基本块进行二进制编码,将所有后继块的信息编码进二进制位里。当程序运行进入一个基本块时,算法查看当前基本块在二进制位里所对应的数字是否为零,当代表数字为零时,表示该程序出现了非法跳转,检测到控制流跳转错误;当代表数字为非零时,则表示程序控制流跳转正常。RSCFC的编码取决于机器字长,机器字长是有限的,可编码的基本块数较少,编码效率低,影响实用性。CFCSS为每个基本块分配一个数字标签S,并计算与其前驱块静态标签的异或差异值D。程序执行过程中,CFCSS使用寄存器保存动态标签G,进入一个基本块后,将G与当前块的D值异或运算产生新的动态标签G。将新的动态标签G与当前基本块的S标签进行比较,如果相等,则程序控制流跳转正常;如果不相等,则检测到控制流跳转错误。CFCSS能够检测大部分控制流错误,但存在匿名问题[9]。RSCFC是基于后继块信息标签来检测控制流错误,CFCSS是基于前驱块信息标签来检测控制流错误。

其他标签分析法[10-13]的基本原理与CFCSS或RSCFC相似,但是在基本块标签和检测指令序列的设计上有所区别[14]。这类针对每个块只有一次检测过程的算法具有滞后性,从一个基本块的中部跳到另一个基本块的中部时,按照算法会跳过检测断言,不能立即发现错误,必须等到下一个块的检测运算才能发现错误。文中基于基本块结构化标签提出一种控制流错误检测算法SCFD(signatures control flow detection),采用后继块信息标签进行控制流错误检测,将程序划分为基本块,设置标签,插入检测断言,对每个基本块进行双重检测,能够较有效地检测出控制流错误并且避免基本块间的滞后性问题。

1 SCFD算法

SCFD算法首先将程序划分为基本块,形成程序控制流图,在控制流图的基础上设计基本块的结构化标签,使标签带有基本块的后继块信息和当前块的顺序信息,根据标签对一个基本块进行双重检测。

1.1 基本块的生成

将程序划分为基本块,形成控制流图。程序划分块后,对划分的块从0到n-1进行编号,n为划分的最大块数。基本块[15]:由一系列指令代码构成,除第一条指令代码外,其他指令代码都不能是分支指令代码的目标,除最后一条指令代码外,其他指令代码都不能是分支指令代码,基本块内部只能是顺序执行。

1.2 基本块标签设计

步骤5:执行程序如果检测到错误则进行错误处理。

(4)焊接接头腐蚀试验 主要是检测焊接接头抗点腐蚀能力,根据各种腐蚀试验的特点,试验方法按照ASTM G48 A法进行试验。腐蚀溶液为10%F e Cl3溶液,试样尺寸50mm×25mm×3mm,使用高精密电子天平进行称试样重,精确到0.001g。试样在50℃恒温水浴锅中进行腐蚀,腐蚀时间为72h。验收标准为计算腐蚀速率≤10mdd(毫克/(平方分米·日)),20×放大镜下观察试样表面不得出现明显点蚀。

SET1:L=Li;用变量L,记录当前基本块编号Li

TEST1:if((S>>Ti*8)&Li)!=Li);对变量S进行操作,取得与当前基本块所对应的后继块信息并与Li标签进行匹配操作,如果匹配则程序跳转合法,否则发现控制流错误。

步骤3:为程序添加全局变量SL,并初始化。

SET2:S=Sn;变量SSn标签赋值更新。

2013年是全面贯彻落实党的十八大精神的第一年和新一届政府工作的开局之年,也是实施“十二五”规划承前启后的关键一年。在市委、市政府的坚强领导和水利部的有力指导下,全市各级水务部门全面贯彻落实党的十八大和十八届三中全会精神,着力优化治水思路、提升水务能级,以更高的标准,全力做好申城水安全、水资源、水环境、水生态等四篇大文章,以防汛、供水、水环境、改革四个提升,为美丽中国梦和水润大上海作出新贡献!

TEST2:if(L!=Li);判断变量L是否与Li标签相等,若相等则跳转合法,否则发现控制流错误。

SET1断言和TEST2断言对变量LLi标签进行操作,SET2断言和TEST1断言对变量SSn标签进行操作。当TEST1断言和TEST2断言的if语句运算为真时,就代表程序发生了控制流非法跳转。程序跳转到一个基本块时,若从块首一直运行到块尾,则要经过断言TEST1和TEST2的双重检测判断,即使跳过了块首处的断言TEST1的检测判断,在块尾还有断言TEST2的检测判断,较有效提高了算法检测判断的可靠性;并且能够在当前块发现控制流错误,不会延迟到后面的基本块,较有效地解决了基本块间检测的滞后性问题。断言TEST1和SET2的放置位置可以适当调整,从而能够对块内进行部分控制流错误检测。SCFD算法的基本块结构如图1所示。

 

图1 SCFD算法基本块结构

1.3 运行过程

联芳基氨基噻嗪类BACE1抑制剂的3D-QSAR分析与分子对接研究 ……………………………………… 刘景陶等(10):1335

部分中职教师只关注自己是否将旅游知识传输到学生的脑海之中,而忽略了学生是否真正做到了学以致用,之所以会产生上述现象是由于这部分教师依然受传统教育模式的影响,他们一直延续照本宣科的教育策略传授理论知识。新的时代面临新的教育形势,教师应该将更多的话语权和主导权全权放在学生身上,让学生自主思考问题和探究问题,从而培养学生自主学习的能力。小组合作编写微剧是一种满足上述教学要求的有效教学方式,其不仅可以营造轻松活泼的课堂氛围,提高学生参与学习的积极性,而且还能通过寓教于乐的形式进一步夯实学生的理论结构。

步骤1:将程序划分为基本块,形成控制流图。

对程序的单个控制流错误可以分为两大类:一是目标基本块是源基本块的合法后继节点;二是目标基本块不是源基本块的合法后继节点。程序的控制流跳转大致如图2所示。

数学结构的发现便于我们高效解决一些数学问题,对于化简繁杂数学知识,内化数学方法有着重大的指导意义。通过观察、归纳、总结,发现数学结构的特点,进而发现数学中的知识间的韵律及统一,是一种美的享受。

在一个炎炎的夏日,我做完了所有的作业,正闲着没事儿干的时候,奶奶走了过来,对我说:“陈愉函,你想不想跟奶奶学煮面条啊?”我兴奋地说:“想啊想啊!”奶奶于是就把我带到了厨房,说:“你先和奶奶一起学会用灶吧。”

0号线表示由基本块0尾部跳到基本块1首部,控制流正常跳转。

文中算法在每个基本块中插入4条断言,在块首插入2条:SET1(赋值更新)和TEST1(判断检测),在块尾插入2条:SET2(赋值更新)和TEST2(判断检测)。算法为每个基本块插入标签:Li标签表示当前基本块的编号信息;Sn标签记录了当前块的后继块信息,Sn标签是一个二进制数,每8 bit记录一个后继块信息;Ti标签,若基本块p是基本块q的后继块,则Ti表示基本块p的编号在基本块q的后继块标签Sn中的第几段(由0开始计数)。如第32基本块的后继块为第33块和第34块,则第32块的Sn标签为0x00002221,第33块的Ti=0,第34块的Ti=1。4条断言及其作用如下:

会上,第10届中国高端家电红顶奖评选结果正式公布,共有24款产品荣获红顶奖大奖和设计奖,另有50款产品获得红顶奖提名,获奖的高端家电精品和智能尚品到处体现着智慧科技带来的便利和设计美感带来的愉悦。

SL是程序运行过程中动态更新的变量,用来与设置的标签进行匹配操作,从而检测控制流错误。当程序运行进入一个基本块时,在基本块首部,设置好标签LiTiSn;执行断言SET1,由Li标签对变量L进行赋值更新;执行断言TEST1,通过变量S判断当前块是否为上一基本块的合法后继块,如果是合法后继块则继续运行,否则进行错误处理;执行断言SET2,由Sn标签对变量S进行赋值更新;执行断言TEST2,判断当前块是否由基本块首部执行到基本块尾部,如果是则继续运行,否则发现控制流错误。

2 检错能力分析

2.1 基本块之间的控制流错误检测

步骤2:根据控制流图为每个基本块添加标签SnLiTi

算法的基本步骤总结如下:

  

图2 块间控制流跳转示意

图2(a)为第一类跳转错误,目标块为合法后继节点:

步骤4:如果只检测块间的控制流跳转,在块首插入断言SET1和TEST1,在块尾插入断言SET2和TEST2。如果同时检测块间和块内控制流跳转,断言SET1放置在基本块首部,断言TEST2放置在基本块尾部,调整断言TEST1和SET2的位置,放置在基本块的内部。

从表10可看出,在资本总额、息税前利润相等的情况下,付息债务比率越高,财务杠杆系数越大,则财务风险也越大。同时,由于负债债务的节税效应,相比股权而言,预期每股收益也越高。

1号线表示由基本块0中间跳到基本块1首部,没有执行0块的SET2运算更新S,则此时的S记录的后继块信息中没有基本块1的信息,运行到1块进行TEST1运算时,(S>>Ti*8)&Li)!=Li,检测到控制流出错。

2号线表示由基本块0的中间跳到基本块1的中间,没有执行基本块1的SET1运算,则L=L0=0,进行基本块1的TEST2运算时,L=L0=0,L1=1,L!=L1,检测到控制流出错。

3号线表示由基本块0的尾部跳到基本块1的中间,没有执行基本块1的SET1运算,则L=L0=0,进行基本块1的TEST2运算时,L=L0=0,L1=1,L!=L1,检测到控制流出错。

股票模型发展趋势的概率以连锁模型为基准,从而构造只包括股票和现金的组合。假设以S0的价格买入a股股票,现金是b美元,则投资额即:

图2(b)为第二类跳转错误,目标块是非合法后继节点:

4号线表示由基本块0的尾部跳到基本块2的首部,因为基本块2不是基本块0的合法后继节点,所以此时S记录的后继块信息中没有基本块2的信息,基本块2执行TEST1运算时,(S>>Ti*8)&Li)!=Li,检测到控制流出错。

5号线表示由基本块0的中间跳到基本块2的首部,因为基本块2不是基本块0的合法后继节点,所以此时S记录的后继块信息中没有基本块2的信息,基本块2执行TEST1运算时,(S>>Ti*8)&Li)!=Li,检测到控制流出错。

6号线表示由基本块0的中间跳到基本块2的中间,没有执行基本块2的SET1运算,则L=L0=0,进行基本块2的TEST2运算时,L=L0=0,L2=2,L!=L2,检测到控制流出错。

7号线表示由基本块0的尾部跳到基本块2的中间,没有执行基本块2的SET1运算,则L=L0=0,进行基本块1的TEST2运算时,L=L0=0,L2=2,L!=L2,检测到控制流出错。

根据以上分析,通过断言TEST1和TEST2的双重检测判断,可较有效地检测出控制流错误;并且能够在当前基本块发现控制流错误,不延迟到后面的基本块中。

2.2 基本块内部的控制错误检测

文中算法对块内的控制流错误检测主要能检测出2种错误类型,如图3所示。

  

图3 块内错误跳转类型

1号虚线表示跳转错误,因为没有执行SET2运算,S没有得到更新,所以在执行到下一块的TEST1运算时,(S>>Ti*8)&Li)!=Li,出错,检测到控制流错误;2号虚线表示跳转错误,因为执行过SET2S已经得到更新,在执行到TEST1运算时,(S>>Ti*8)&Li)!=Li,出错,检测到控制流错误。

3 实验结果

采用快速排序(QS)作为基准程序来测试SCFD算法的检错能力及性能。首先利用Simple Scalar[16]自带的GCC交叉编译器将基准程序编译成平台支持的指令集,然后在基准程序的汇编代码中插入各种标签以及检测断言,这样基准程序的汇编代码就转换为容错汇编代码。接着通过在容错汇编代码中随机地删除某个分支指令,或者在容错汇编代码中随机地插入附加的分支指令,也可以通过随机更改容错汇编代码中某个分支指令的操作数等方式来达到注入软件控制流故障[17]的目的。经过以上处理后的基准程序的汇编代码就变成了具有控制流检测功能而且含有控制流错误的汇编代码,汇编以上得到的汇编代码后得到目标代码,最后在Simple Scalar工具模拟的底层硬件平台上执行目标代码。

3.1.4 管理制度 护理工作有计划并按计划落实,规章制度健全并严格贯彻执行,护理资料齐全并尽量达到计算机管理。如年计划目标达标率。

为比较SCFD算法的具体效果,将基准程序的指令集生成3个版本,包括源程序、加入RSCFC算法以及加入SCFD算法的指令集。对3个版本的指令集注入控制流错误,然后重复执行目标代码1 000次,统计程序运行的各种结果,如表1所示。

 

表1 实验结果

  

结果源程序RSCFCSCFD次数百分比/%次数百分比/%次数百分比/%未检测出错误且结果错误35535.511311.3484.8程序结果正确20020.040240.235235.2检测到错误0031031.049149.1程序异常45545.517517.510910.9

根据表1,主要关注未检测出错误并且结果错误这一栏的数据,其是影响算法检测能力的主要因素。未检测出错误并且结果错误这一栏中,RSCFC算法百分比为11.3%,SCFD算法百分比为4.8%,则RSCFC和SCFD算法的检错率分别为88.7%和95.2%。在发生控制流错误时,SCFD检测能力高于RSCFC。

4 结束语

提出一种新的基于结构化标签的控制流错误检测算法SCFD,将源程序划分为基本块后,对基本块顺序编号,引入一个表示后继关系的标签,对每个块的首部和尾部都分别加上了相应的检测指令,在保证控制流检测效能的情况下,解决了基本块间检测的滞后性问题。该算法灵活性好,运用简单;但算法的标签设计实现了最多有256个基本块,且每个基本块最多有4个合法后继块,可适用的程序有一定的限制,对基本块内部的检测作用较小,有待进一步的研究。

参考文献:

[1] NICOLESCU B,VELAZCO R.Detecting soft errors by a purely software approach:method,tools and experimental results[C]//Proceedings of the conference on design,automation and test in Europe:designers’ forum.Los AlaTitos,CA:IEEE,2003:57-62.

[2] SAXENA N R,MCCLUSKEY E J.Control-flow checking using watchdog assists and extended-precision checksums[J].IEEE Transactions on Computers,1990,39(4):554-559.

[3] 李爱国,洪炳镕,王 司.软件实现的程序控制流校验方法研究进展[J].哈尔滨工业大学学报,2008,40(3):407-412.

[4] 吴艳霞,顾国昌,戴 葵,等.汇编级软硬结合的控制流检测方法[J].计算机研究与发展,2010,47(8):1481-1489.

[5] ALKHALIFA Z,NAIR V S S,KRISHNAMURTHY N.Design and evaluation of system level checks for line control flow error detection[J].IEEE Transactions on Parallel and Distributed Systems,1999,10(6):627-641.

[6] OH N,SHIRVANI P P,MCCLUSKEY E J.Control flow checking by software signatures[J].IEEE Transactions on Reliability,2002,51(1):111-122.

[7] LI Aiguo,HONG Bingrong.Software implemented transient fault detection in space computer[J].Aerospace Science and Technology,2007,11(2-3):245-252.

[8] ASGHARI S A,TAHERI H,PEDRAM H,et al.Software-based control flow checking against transient faults in industrial environments[J].IEEE Transactions on Industrial Informatics,2014,10(1):481-490.

[9] 李剑明,谭庆平,徐建军,等.基于路径跟踪的控制流检测[J].计算机工程,2009,35(20):68-70.

[10] VEMU R,ABRAHAM J A.CEDA:control-flow error detection using assertions[J].IEEE Transactions on Computers,2011,60(9):1233-1245.

[11] 李建立,谭庆平,谭兰芳,等.一种基于虚拟基本块和格式化标签的控制流检测方法[J].计算机学报,2014,37(11):2287-2297.

[12] REIS G A,CHANG J,VACHHARAJANI N,et al.Software-controlled fault tolerance[J].ACM Transactions on Architecture and Code Optimization,2005,2(4):366-396.

[13] VENKATASUBRAMANIAN R,HAYES J P,MURRAY B T.Low-cost on-line fault detection using control flow assertions[C]//Proceedings of the 9th international on-line testing symposium.[s.l.]:IEEE Press,2003:137-143.

[14] 徐建军,谭庆平,李建立,等.一种基于格式化标签的可扩展控制流检测方法[J].计算机研究与发展,2011,48(4):638-646.

[15] 张广梅,李景霞.面向软件错误检测的数据流分析[J].计算机科学,2016,43:497-501.

[16] BURGER D C,AUSTIN T M.The simple scalar tool set[R].Madison:University of Wisconsin,1997.

[17] 陈锦富,卢炎生,谢晓东.软件错误注入测试技术研究[J].软件学报,2009,20(6):1425-1443.

 
姚伟,顾晶晶
《计算机技术与发展》2018年第05期文献

服务严谨可靠 7×14小时在线支持 支持宝特邀商家 不满意退款

本站非杂志社官网,上千家国家级期刊、省级期刊、北大核心、南大核心、专业的职称论文发表网站。
职称论文发表、杂志论文发表、期刊征稿、期刊投稿,论文发表指导正规机构。是您首选最可靠,最快速的期刊论文发表网站。
免责声明:本网站部分资源、信息来源于网络,完全免费共享,仅供学习和研究使用,版权和著作权归原作者所有
如有不愿意被转载的情况,请通知我们删除已转载的信息 粤ICP备2023046998号