首页> 中国专利> C25汇编代码静态分析方法

C25汇编代码静态分析方法

摘要

本发明涉及一种C25汇编代码静态分析方法,属于软件测试技术领域。本发明在解释执行该汇编语句的基础上,检查代码中是否存在典型错误,针对典型错误的特点,采用忽略跳转指令强行顺序解释执行和分支覆盖解释执行两种方式对C25汇编代码进行分析,包括对C25汇编软件进行规则检查、比例尺检查、质量度量,提高了C25汇编软件测试的充分性。

著录项

  • 公开/公告号CN107291622A

    专利类型发明专利

  • 公开/公告日2017-10-24

    原文格式PDF

  • 申请/专利权人 北京计算机技术及应用研究所;

    申请/专利号CN201710587079.6

  • 发明设计人 杨波;李敏;李伟;

    申请日2017-07-18

  • 分类号

  • 代理机构中国兵器工业集团公司专利中心;

  • 代理人刘瑞东

  • 地址 100854 北京市海淀区永定路51号

  • 入库时间 2023-06-19 03:34:25

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2020-03-31

    授权

    授权

  • 2017-11-24

    实质审查的生效 IPC(主分类):G06F11/36 申请日:20170718

    实质审查的生效

  • 2017-10-24

    公开

    公开

说明书

技术领域

本发明涉及软件测试技术领域,具体涉及一种C25汇编代码静态分析方法。

背景技术

TMS320C25定点DSP芯片由于可国产化且可靠性高,在项目中大量使用。但是其汇编语言编写的程序所需注意的事项繁琐,编写的汇编代码中易存在代码审查、动态测试较难发现的错误。

C25汇编语言缺乏静态分析工具,静态测试全靠测试人员进行代码审查,大量的代码容易导致测试人员的疲劳,也易导致测试后,程序仍然存留低级错误。为提高软件测试的效率和质量,需要设计针对C25汇编语言的静态分析工具来辅助代码审查。

发明内容

(一)要解决的技术问题

本发明要解决的技术问题是:如何设计一种C25汇编代码静态分析方法,以提高软件测试的效率和质量。

(二)技术方案

为了解决上述技术问题,本发明提供了一种C25汇编代码静态分析方法,包括以下步骤:

S1、采用强行顺序读取程序代码的方式来统计度量元,并利用状态机来识别模块:

利用状态机来识别模块时,从文件头开始读取,读取到非执行代码,包括注释、变量定义,则说明状态机的状态为模块外,当读取到标号后,把标号当成模块名称,设置状态机状态为模块内,当状态机状态为模块内时,若读取到模块结束指令,则设置模块扫描完成,并设置状态机状态为模块外;

S2、对于状态机状态为模块内的模块,获取被测件的基本信息:

获取C25编程语言的各指令字符,包括普通指令字和跳转指令字;

获取C25编程语言的宏字符;

获取变量所在页、变量地址以及规定的比例尺;

获取需要分析的源代码列表;

将源代码进行消除标号、注释处理,保留可执行语句,得到可执行语句列表;

S3、对于可执行语句中上下语句无关联的错误,利用强行顺序解释执行的方式来检查:

强行顺序解释执行过程中,忽略跳转指令,强行顺序解释执行分析的数据包含:标号的使用次数、地址和立即数混用的警告、多余变量、未定义地址的读写;其中,标号的引用次数列表用于分析跳转标号引用是否错误,标号引用错误的特点是存在没有被引用的标号和被多次引用的标号;

S4、对于可执行语句中有上下语句关联性的错误,利用跳转指令分支覆盖解释执行的方式来检查,检查时,先获取需解释执行的可执行语句的地址;再查询该可执行语句的解释方式;若为变量引用语句,则检查页指针的正确使用;若为加减赋值语句时,则检查寄存器字段溢出方式OVM和寄存器字段符号位扩展SMX的值是否符合要求以及变量比例尺是否相等;若为乘法语句时,检查寄存器字段乘法寄存器字段移位PM的值是否符合要求。

优选地,步骤S1中,在状态机状态为模块内时,还统计模块内的有效代码行、注释行、空白行和跳转分支数这些有效信息。

优选地,步骤S4中,所述利用跳转指令分支覆盖解释执行的方式来检查具体为:顺序解释执行指令代码,当指令为条件跳转指令时,若语句未执行,则先覆盖满足条件的分支,且记录该分支执行度为1,若两种满足条件的分支均被覆盖,记录分支执行度为2;此后再次解释执行到该条件跳转指令时,若一分支后续的分支执行力度均为2或无后续分支,则覆盖不满足条件的分支,且记录该分支执行力度为2,并重新设置该分支后续分支的执行力度为1;若该分支后存在执行力度为1的分支,则继续覆盖满足条件的分支;执行到模块结束指令时,返回模块起始地址,并查询上次执行后所记录分支的执行力度,若存在1,则继续解释执行该模块,若都为2,则表明该模块的分支全部覆盖,此时完成该模块的检查。

优选地,所述模块结束指令为RET。

优选地,所述模块结束指令为RTI。

(三)有益效果

本发明在解释执行该汇编语句的基础上,检查代码中是否存在典型错误,针对典型错误的特点,采用忽略跳转指令强行顺序解释执行和分支覆盖解释执行两种方式对C25汇编代码进行分析,包括对C25汇编软件进行规则检查、比例尺检查、质量度量,提高了C25汇编软件测试的充分性。

附图说明

图1为本发明的方法实现框图;

图2为模块识别状态机设置示意图;

图3为获取被测件基本信息以及分析出的数据示意图;

图4为强行顺序执行的流程以及所分析出的数据示意图;

图5为分支覆盖算法解释示意图;

图6为分支覆盖解释执行处理流程以及分析出的数据示意图。

具体实施方式

为使本发明的目的、内容、和优点更加清楚,下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。

本发明针对典型错误的特点,采用忽略跳转指令强行顺序解释执行和分支覆盖解释执行两种方式对C25汇编代码进行分析。其中对于上下语句无关联的错误(表1中的序号1~2),采用强行顺序解释执行的方式来检查。对于有上下语句关联性的错误(表1中的序号3~7),采用的是模拟代码真实执行流程,对条件跳转指令进行分支覆盖的方式进行检查。

表1C25汇编语言编写代码易存在的错误

如图1所示,本发明的C25汇编代码静态分析方法具体步骤如下:

步骤一、质量度量数据采集模块采用强行顺序读取程序代码的方式来统计度量元(统计结果作为分析结果之一),并利用状态机来识别模块。

从文件头开始读取,读取到非执行代码(程序注释,变量定义等),则说明状态机的状态为模块外,当读取了标号后,把标号当成模块名称,设置状态机状态为模块内,当状态机状态为模块内时,若读取到模块结束指令RET或RTI,则设置模块扫描完成,并设置状态机状态为模块外。在状态机状态为模块内时,需重点统计模块内的有效代码行,注释行,空白行,跳转分支数等有效信息。状态机设置见图2。

度量元采集需要准备文件如下:

表2度量元采集需准备的文件列表

序号文件含义1asmconfig.CFG所需检查文件列表

在进行度量元采集时,先注释掉主程序和中断入口程序以及宏定义代码,合计15行。

表3度量元采集前需要处理的代码

步骤二、规则检查与比例尺检查模块需要先针对状态机状态为模块内的模块获取被测件的基本信息,获取被测件基本信息的流程见图3,获取C25编程语言的各指令字符,包括普通指令字和跳转指令字;获取C25编程语言的宏字符;获取变量所在页、变量地址以及规定的比例尺;获取需要分析的源代码列表;将源代码进行消除标号、注释处理,保留可执行语句,得到可执行语句列表。

规则检查需准备文件列表如下:

表3规则检查需准备的文件列表

序号文件含义1asmconfig.CFG所需检查文件列表2varsc.cfg变量定义列表

其中变量列表文件“varsc.cfg”,从源代码中提取,定义了变量所在的页,示例:

在进行规则检查时,先注释掉主程序和中断入口程序以及宏定义代码,合计15行。

表4规则检查前需要处理的代码

在比例尺检查时,需要在规则检查代码的基础上针对立即数送入ACC和比例尺有变化的变量进行插桩,示例如下:

比例尺检查所需文件列表如下:

表5比例尺检查所需文件列表

序号文件含义1asmconfig.CFG所需检查文件列表2varsc.cfg变量定义列表

其中变量列表文件“varsc.cfg”,源代码中提取,定义变量所在的页。

步骤三、对于可执行语句中上下语句无关联的错误,利用强行顺序解释执行的方式来检查。

强行顺序解释执行过程中,忽略跳转指令,不需要遍历路径,执行速度快,强行顺序解释执行的流程如图4所示。

从图4可看出,强行顺序解释执行分析的数据包含:标号的使用次数、地址和立即数混用的警告、多余变量、未定义地址的读写。其中,标号的引用次数列表可以用于分析跳转标号引用是否错误,跳转标号引用错误一般是由于程序编写人员在拷贝相似功能的程序代码时,跳转标号修改笔误导致的;所以标号引用错误的特点是存在没有被引用的标号和被多次引用的标号。此工具可采集所有的标号和该标号被引用的次数,若被引用次数为0或者大于1的标号,给出醒目标记,提醒测试人员该段代码可能存在跳转错误。

步骤四、对于可执行语句中有上下语句关联性的错误,利用跳转指令分支覆盖解释执行的方式来检查。

对于一些上下语句关联性的错误,例如页指针、比例尺使用错误,OVM、SXM、PM寄存器字段赋值错误,需要在真实的执行路径下进行分析,因此采用跳转指令分支覆盖的方式,对程序代码进行指定的规则检查。但由于跳转指令分支覆盖解释执行,对复杂的模块,几乎要遍历所有路径,消耗时间长,因此一般单独对选定的模块进行分析。

解释执行条件跳转指令和CALL函数调用指令的算法是静态分析工具实现分支覆盖的基础。

分支覆盖解释执行基础算法为:顺序解释执行指令代码,当指令为条件跳转指令时,若该语句未执行,则先覆盖满足条件的分支,且记录该分支执行度为1(若两种条件的分支均被覆盖,记录该分支执行度为2);此后再次解释执行到该条件跳转指令时,若该分支后续的分支执行力度均为2或无后续分支,则覆盖不满足条件的分支(顺序执行),且记录该分支执行力度为2(表明该分支被完全覆盖),并重新设置该分支后续分支的执行力度为1;若该分支后存在执行力度为1的分支,则继续覆盖满足条件的分支。执行到模块结束指令(RTI)时,返回模块起始地址,并查询上次执行后所记录分支的执行力度,若存在1,则需要继续解释执行该模块,若都为2,则表明该模块的分支全部覆盖。

以图5为例,此工具采用分支覆盖解释执行的方式,解释执行汇编代码,模拟真实情况下代码的执行路径。按分支跳转的流程解释执行,若遇到跳转分支,按算法设置进行跳转,直到分支都被覆盖后,即表明完成该模块的检查。

从图5可以看出,对该模块每轮解释执行后,只需要判定是否存在执行力度为1的分支,就可以判定分支是否完全覆盖,尽管该模块存在4个条件跳转分支,但只需要进行5轮解释执行,就可以覆盖所有的分支(所有分支执行度为2)。

对CALL指令的处理方式有2种:第一种为该指令调用的模块被分支覆盖后,下次不再进入模块进行检查,直接忽略该指令,以减少重复解释执行模块的时间消耗,提高检查效率;第二种为每次调用该模块,均重新对该模块进行分支覆盖检查,该处理方式检查代码更深入。

在分支覆盖解释执行的基础上,对被测件代码进行分析检查,分支覆盖解释执行处理流程如图6所示,即在检查时,先获取需解释执行的可执行语句的地址;再查询该可执行语句的解释方式;若为变量引用语句,则检查页指针的正确使用;若为加减赋值语句时,则检查寄存器字段溢出方式OVM和寄存器字段符号位扩展SMX的值是否符合要求以及变量比例尺是否相等;若为乘法语句时,检查寄存器字段乘法寄存器字段移位PM的值是否符合要求。

从图6可以看出,对被测代码进行分支覆盖解释执行可以检查出更多的软件缺陷:在引用变量时,检查页指针的正确使用;在进行加减运算时,检查寄存器字段OVM(溢出方式)和寄存器字段SMX(符号位扩展)的值是否符合要求以及变量比例尺是否相等;进行乘法运行时,检查寄存器字段PM(乘法寄存器字段移位)的值是否符合要求。

规则检查结果:

1)标号错误与地址、立即数混用错误

表6中列出了静态分析工具分析出的部分典型标号信息。通过扫描结果,可定位含有错误跳转语句的代码。

表6标号信息列表(存在问题时的扫描结果)

表6中相似标号引用不一致(倒数第1、3行),对照源代码审查时,发现代码编写错误导致跳转错误。

2)页指针使用检查

示例中:变量RDDH的设定页面为第9页,但代码中LDPK10设置使用的页面为第10页,工具扫描出错误,并给出提示“error!PAGE10NORDDH”。

3)PM寄存器使用检测

MPY使用前,需设置SPM为1,代码指令SPM0设置PM为0,工具扫描出错误,并给出提示。

4)OVM寄存器使用检测

加减法要求OVM寄存器为1,代码中指令ROVM设置OVM为0,工具扫描出错误,并给出提示。

5)SXM寄存器使用检测

调用函数SINCOS要求SXM为1,代码中RSXM指令设置SXM为0,工具扫描出错误,并给出提示。

比例尺检查结果:

打开所选择目录下的*.asm.html,446-452为进行比例尺检查扫描过的代码,[VTTMP]表示比例尺错误提示。

以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明技术原理的前提下,还可以做出若干改进和变形,这些改进和变形也应视为本发明的保护范围。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号