CN107291622B - C25汇编代码静态分析方法 - Google Patents
C25汇编代码静态分析方法 Download PDFInfo
- Publication number
- CN107291622B CN107291622B CN201710587079.6A CN201710587079A CN107291622B CN 107291622 B CN107291622 B CN 107291622B CN 201710587079 A CN201710587079 A CN 201710587079A CN 107291622 B CN107291622 B CN 107291622B
- Authority
- CN
- China
- Prior art keywords
- branch
- execution
- module
- statement
- instruction
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3688—Test management for test execution, e.g. scheduling of test suites
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3668—Software testing
- G06F11/3672—Test management
- G06F11/3676—Test management for coverage analysis
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明涉及一种C25汇编代码静态分析方法,属于软件测试技术领域。本发明在解释执行该汇编语句的基础上,检查代码中是否存在典型错误,针对典型错误的特点,采用忽略跳转指令强行顺序解释执行和分支覆盖解释执行两种方式对C25汇编代码进行分析,包括对C25汇编软件进行规则检查、比例尺检查、质量度量,提高了C25汇编软件测试的充分性。
Description
技术领域
本发明涉及软件测试技术领域,具体涉及一种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度量元采集需准备的文件列表
序号 | 文件 | 含义 |
1 | asmconfig.CFG | 所需检查文件列表 |
在进行度量元采集时,先注释掉主程序和中断入口程序以及宏定义代码,合计15行。
表3度量元采集前需要处理的代码
步骤二、规则检查与比例尺检查模块需要先针对状态机状态为模块内的模块获取被测件的基本信息,获取被测件基本信息的流程见图3,获取C25编程语言的各指令字符,包括普通指令字和跳转指令字;获取C25编程语言的宏字符;获取变量所在页、变量地址以及规定的比例尺;获取需要分析的源代码列表;将源代码进行消除标号、注释处理,保留可执行语句,得到可执行语句列表。
规则检查需准备文件列表如下:
表3规则检查需准备的文件列表
序号 | 文件 | 含义 |
1 | asmconfig.CFG | 所需检查文件列表 |
2 | varsc.cfg | 变量定义列表 |
其中变量列表文件“varsc.cfg”,从源代码中提取,定义了变量所在的页,示例:
在进行规则检查时,先注释掉主程序和中断入口程序以及宏定义代码,合计15行。
表4规则检查前需要处理的代码
在比例尺检查时,需要在规则检查代码的基础上针对立即数送入ACC和比例尺有变化的变量进行插桩,示例如下:
比例尺检查所需文件列表如下:
表5比例尺检查所需文件列表
序号 | 文件 | 含义 |
1 | asmconfig.CFG | 所需检查文件列表 |
2 | varsc.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]表示比例尺错误提示。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明技术原理的前提下,还可以做出若干改进和变形,这些改进和变形也应视为本发明的保护范围。
Claims (5)
1.一种C25汇编代码静态分析方法,其特征在于,包括以下步骤:
S1、采用强行顺序读取程序代码的方式来统计度量元,并利用状态机来识别模块:
利用状态机来识别模块时,从文件头开始读取,读取到非执行代码,包括注释、变量定义,则说明状态机的状态为模块外,当读取到标号后,把标号当成模块名称,设置状态机状态为模块内,当状态机状态为模块内时,若读取到模块结束指令,则设置模块扫描完成,并设置状态机状态为模块外;
S2、对于状态机状态为模块内的模块,获取被测件的基本信息:
获取C25编程语言的各指令字符,包括普通指令字和跳转指令字;
获取C25编程语言的宏字符;
获取变量所在页、变量地址以及规定的比例尺;
获取需要分析的源代码列表;
将源代码进行消除标号、注释处理,保留可执行语句,得到可执行语句列表;
S3、对于可执行语句中上下语句无关联的错误,利用强行顺序解释执行的方式来检查:
强行顺序解释执行过程中,忽略跳转指令,强行顺序解释执行分析的数据包含:标号的使用次数、地址和立即数混用的警告、多余变量、未定义地址的读写;其中,标号的使用次数列表用于分析跳转标号引用是否错误,标号引用错误的特点是存在没有被引用的标号和被多次引用的标号;
S4、对于可执行语句中有上下语句关联性的错误,利用跳转指令分支覆盖解释执行的方式来检查,检查时,先获取需解释执行的可执行语句的地址;再查询该可执行语句的解释方式;若为变量引用语句,则检查页指针的正确使用;若为加减赋值语句时,则检查寄存器字段溢出方式OVM和寄存器字段符号位扩展SMX的值是否符合要求以及变量比例尺是否相等;若为乘法语句时,检查寄存器字段乘法寄存器字段移位PM的值是否符合要求。
2.如权利要求1所述的方法,其特征在于,步骤S1中,在状态机状态为模块内时,还统计模块内的有效代码行、注释行、空白行和跳转分支数这些有效信息。
3.如权利要求1所述的方法,其特征在于,步骤S4中,所述利用跳转指令分支覆盖解释执行的方式来检查具体为:顺序解释执行指令代码,当指令为条件跳转指令时,若语句未执行,则先覆盖满足条件的分支,且记录分支执行度为1,若两种满足条件的分支均被覆盖,记录分支执行度为2;此后再次解释执行到该条件跳转指令时,若一分支后续的分支执行力度均为2或无后续分支,则覆盖不满足条件的分支,且记录该分支执行力度为2,并重新设置该分支后续分支的执行力度为1;若该分支后存在执行力度为1的分支,则继续覆盖满足条件的分支;执行到模块结束指令时,返回模块起始地址,并查询上次执行后所记录分支的执行力度,若存在1,则继续解释执行该模块,若都为2,则表明该模块的分支全部覆盖,此时完成该模块的检查。
4.如权利要求1所述的方法,其特征在于,所述模块结束指令为RET。
5.如权利要求1至4中任一项所述的方法,其特征在于,所述模块结束指令为RTI。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710587079.6A CN107291622B (zh) | 2017-07-18 | 2017-07-18 | C25汇编代码静态分析方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710587079.6A CN107291622B (zh) | 2017-07-18 | 2017-07-18 | C25汇编代码静态分析方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107291622A CN107291622A (zh) | 2017-10-24 |
CN107291622B true CN107291622B (zh) | 2020-03-31 |
Family
ID=60101110
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710587079.6A Active CN107291622B (zh) | 2017-07-18 | 2017-07-18 | C25汇编代码静态分析方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107291622B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107942733A (zh) * | 2017-12-15 | 2018-04-20 | 四川汉科计算机信息技术有限公司 | 模型测试系统 |
CN112905443B (zh) * | 2019-12-04 | 2024-06-14 | 阿里巴巴集团控股有限公司 | 一种测试用例生成方法、设备及存储介质 |
CN114153750B (zh) * | 2022-02-10 | 2022-05-31 | 北京壁仞科技开发有限公司 | 代码检查方法及装置、代码编写方法、电子设备 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101763291A (zh) * | 2009-12-30 | 2010-06-30 | 中国人民解放军国防科学技术大学 | 一种程序控制流错误检测方法 |
CN102419730A (zh) * | 2011-12-08 | 2012-04-18 | 北京控制工程研究所 | 一种51汇编语言软件安全性编码规则自动检查方法 |
CN102789402A (zh) * | 2012-06-29 | 2012-11-21 | 徐下兵 | 一种程序自动查错方法 |
CN103077064A (zh) * | 2012-12-31 | 2013-05-01 | 北京配天大富精密机械有限公司 | 一种解析并执行程序语言方法及解释装置 |
CN104965788A (zh) * | 2015-07-03 | 2015-10-07 | 电子科技大学 | 一种代码静态检测方法 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7661097B2 (en) * | 2005-04-05 | 2010-02-09 | Cisco Technology, Inc. | Method and system for analyzing source code |
US8966635B2 (en) * | 2012-02-24 | 2015-02-24 | Hewlett-Packard Development Company, L.P. | Software module object analysis |
-
2017
- 2017-07-18 CN CN201710587079.6A patent/CN107291622B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101763291A (zh) * | 2009-12-30 | 2010-06-30 | 中国人民解放军国防科学技术大学 | 一种程序控制流错误检测方法 |
CN102419730A (zh) * | 2011-12-08 | 2012-04-18 | 北京控制工程研究所 | 一种51汇编语言软件安全性编码规则自动检查方法 |
CN102789402A (zh) * | 2012-06-29 | 2012-11-21 | 徐下兵 | 一种程序自动查错方法 |
CN103077064A (zh) * | 2012-12-31 | 2013-05-01 | 北京配天大富精密机械有限公司 | 一种解析并执行程序语言方法及解释装置 |
CN104965788A (zh) * | 2015-07-03 | 2015-10-07 | 电子科技大学 | 一种代码静态检测方法 |
Non-Patent Citations (1)
Title |
---|
"一种使用静态分析的汇编代码缺陷检测方法";邱景 等;《哈尔滨工业大学学报》;20130228;第45卷(第2期);第53-59页 * |
Also Published As
Publication number | Publication date |
---|---|
CN107291622A (zh) | 2017-10-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9274923B2 (en) | System and method for stack crawl testing and caching | |
CN107291622B (zh) | C25汇编代码静态分析方法 | |
US8397104B2 (en) | Creation of test plans | |
Chen et al. | Understanding metric-based detectable smells in Python software: A comparative study | |
US20080244536A1 (en) | Evaluating static analysis results using code instrumentation | |
JP7404839B2 (ja) | ソフトウェアプログラム不良位置の識別 | |
CN107885493B (zh) | 程序制作支持方法及程序制作支持装置 | |
CN110515826A (zh) | 一种基于次数频谱与神经网络算法的软件缺陷定位方法 | |
KR101979329B1 (ko) | 바이너리의 취약점을 유발하는 입력데이터 위치 추적 방법 및 그 장치 | |
CN111897727A (zh) | 软件测试方法、装置、计算机设备及存储介质 | |
CN110990282B (zh) | 一种自动化单元测试方法 | |
CN113157565A (zh) | 一种基于种子用例突变的反馈式js引擎模糊测试方法及装置 | |
CN114238980B (zh) | 一种工控设备漏洞挖掘方法、系统、设备及存储介质 | |
CN118035118A (zh) | 一种基于变异的深度学习程序的缺陷定位的方法 | |
CN113434385A (zh) | 一种针对软件模型检查工具的测试用例自动生成方法和系统 | |
CN116469503B (zh) | 一种基于大数据的健康数据处理方法及服务器 | |
CN109101355B (zh) | 一种提取错误现场特征测试激励的处理器调试方法 | |
CN111966578A (zh) | 一种安卓兼容性缺陷修复效果的自动化评估方法 | |
CN109902001B (zh) | 对未初始化变量的检测方法及终端设备 | |
CN115422865B (zh) | 仿真方法及装置、计算设备、计算机可读存储介质 | |
WO2023030282A1 (en) | Methods and devices for assessing generalizability of benchmarks | |
CN115759049A (zh) | 文本检测方法、装置、设备、介质和程序产品 | |
US20070168978A1 (en) | Computer program code debugging method and system | |
CN111382052A (zh) | 代码质量评价方法、装置及电子设备 | |
Scullard | Test case selection using VDM |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |