一种基于代码替换和正则表达式的静态分析工具改进方法

文档序号:9631425阅读:661来源:国知局
一种基于代码替换和正则表达式的静态分析工具改进方法
【技术领域】
[0001]本发明属于计算机编程技术领域,具体涉及一种基于代码替换和正则表达式的静态分析工具改进方法。
【背景技术】
[0002]当前的静态分析工具的处理流程可以分为四个部分:预处理模块、语法分析模块、缺陷模式匹配模块、缺陷模式处理模块。待检测的工程文件或文件夹中的源代码首先经过预处理器的处理得到便于检测的中间代码。中间代码经过语法分析模块的处理,生成抽象语法树。然后缺陷模式匹配模块将已知的缺陷模式和抽象语法树进行匹配,检测其中的缺陷。检测到的缺陷通过缺陷定位和输出模块形成格式化的输出,根据用户的要求生成运行结果。
[0003]其中各个模块的工作过程具体如下:
[0004]预处理模块对源代码的处理主要包括三个部分:遍历各级目录获取待检测的包含源代码的文件列表,组合头文件和源代码文件,对宏定义进行预处理。其中第一个步骤是可选的,只有在输入是文件夹时才会启用。
[0005]语法分析模块的主要功能是对经过预处理器处理过之后的代码进行语法分析,语法分析模块的主要工作包括词法分析、语法分析和语义分析三大部分。经过处理后的中间代码首先经过词法分析切割成一个个被称为“token”的最小化有意义的单位,然后通过语法分析建立起不同“token”之间的关系,建立起一个双向的“token”链表,最终针对“token”的双向链表进行语义分析,构造抽象语法树。
[0006]缺陷模式匹配模块的主要功能是对经过语法分析模块处理之后生成的“token”双向链表进行分析,通过将在工业生产和软件开发中总结出来的多种缺陷模式与“token”双向列表进行对比,找到其中匹配的部分,并且将结果交给缺陷处理模块进行处理。
[0007]缺陷处理模块的主要功能,是针对缺陷模式匹配模块匹配到的缺陷模式以及“token”信息进行处理,生成用户能够直观看出或者用户自定义格式的缺陷报告。该模块的主要工作包括两点,其中一点是根据缺陷模式匹配模块匹配到的缺陷模式以及“token”信息提取相关的缺陷类型、缺陷位置和缺陷相关变量等。另一点则是需要能够对上一步骤提取的缺陷类型、缺陷位置和缺陷相关变量进行处理,按照直观或者用户指定的格式来进行缺陷报告的生成,供用户对缺陷模式检测的结果进行分析。
[0008]现有的静态分析工具在检测涉及自增自减操作的整形溢出问题上存在不足,漏报率较高,导致一些严重的缺陷不能及时发现,影响系统的稳定性。除此之外,当前的静态分析工具没有考虑到可能错误的键入这类问题,这类问题在日常编程中非常常见且无法被编译器检测出来,也不容易人工检查,所以由静态分析工具来实现这类问题的检查是非常有必要的。

【发明内容】

[0009]有鉴于此,本发明提供了一种基于代码替换和正则表达式的静态分析工具改进方法,本发明的目的是利用表达式替换来提高整形溢出问题的准确度,降低漏报率,同时使用正则表达式来匹配可能错误的键入的代码,降低因为疏忽写错代码带来的影响,减少人工检查的成本。
[0010]为了达到上述目的,本发明的技术方案为:静态分析工具包括预处理模块、语法分析以及缺陷模式匹配模块,预处理模块用于对源代码进行预处理,生成中间代码;语法分析模块用于对中间代码进行语法分析最终获得双向token链表;缺陷模式匹配模块用于将双向token链表与缺陷模式进行对比,找到其中匹配的部分,处理获得静态分析结果;其特征在于,在预处理模块中对源代码进行预处理时,对源代码中出现的自增操作i++、++i与自减操作i—、—i进行如下替换:将i++替换为(i = i+l)_l,将++i替换为i = i+1,将
i—换为(i = i_l)+l,将一i替换为i = i_l ;其中i为自增操作或者自减操作的变量。
[0011]在缺陷模式匹配模块中增加如下正则表达式:if (% var% = % num% ) ;if (%any % &% any % ) ;scanf (% str % , % var % );
[0012]其中%var%、% num% n % any % ^ % any % ^ % str % 以及 % var % 均为变量;if为源代码中的if语句,scanf为源代码中的scanf语句。
[0013]进一步地,预处理模块接收外部输入的包含源代码的文件,首先将文件中的头文件和源代码进行组合,然后对源代码中出现的自增操作i++、++i与自减操作1--、一i进行替换之后,再对宏定义进行预处理,最终获得中间代码。
[0014]进一步地,语法分析模块包括如下步骤:对中间代码首先进行词法分析,是将由字符串序列组成的源代码划分创建一个用于存储token的双向token链表,然后逐字节地读入源代码中的每个字符,并将其划分为一个个完整的具有明确含义的最小化的单位token,然后将按照token在源代码中出现的顺序将所有的token添加到双向token链表中。
[0015]进一步地,缺陷模式包括在工业生产和软件开发中总结出来的多种缺陷模式。
[0016]有益效果:
[0017]本发明的目的是利用表达式替换来提高整形溢出问题的准确度,降低漏报率,同时使用正则表达式来匹配可能错误的键入的代码,降低因为疏忽写错代码带来的影响,减少人工检查的成本。
【具体实施方式】
[0018]下面举实施例,对本发明进行详细描述。
[0019]步骤(1)、预处理
[0020]预处理模块的主要功能是针对用户指定的工程文件或工程文件夹中的源代码进行预处理,生成便于进行语法分析的中间代码。
[0021]预处理模块对源代码的处理主要包括四个部分:遍历各级目录获取待检测的包含源代码的文件列表,组合头文件和源代码文件,对自增自减操作进行替换,对宏定义进行预处理。其中第一个步骤是可选的,只有在输入是文件夹时才会启用。第三个步骤的替换方案如下:
[0022]i++ = >((i = i+l)-l)
[0023]++i = >(i = i+1)
[0024]i— = > ((i = 1-1) +1)
[0025]—i = > (i = 1-1)
[0026]以i++替换为((i = i+1) -1)为例说明,假设i = 3,i++表不先使用i,再让i加一,即如果有赋值语句a = i++,则执行该语句后a = 3,i = 4,再看a = ((i = i+l)_l)这个式子,先处理(i = i+1),此时i的值为4,之后将该值减一赋值给a,即a = 3,此时并
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1