(19)中华人民共和国国家知识产权局
(12)发明专利说明书
(10)申请公布号 CN 105389195 A
(43)申请公布日 2016.03.09
(21)申请号 CN201510707442.4正则化其实是破坏最优化
(22)申请日 2015.10.27
(71)申请人 北京理工大学
    地址 100081 北京市海淀区中关村南大街5号
(72)发明人 胡昌振 单纯 于泽 蔡弘非 王勇
(74)专利代理机构 北京理工大学专利中心
    代理人 高燕燕
(51)Int.CI
      G06F9/45
                                                                  权利要求说明书 说明书 幅图
(54)发明名称
      一种基于代码替换和正则表达式的静态分析工具改进方法
(57)摘要
      本发明公开了一种基于代码替换和正则表达式的静态分析工具改进方法,静态分析工具采用预处理模块对源代码进行预处理,生成中间代码;采用语法分析模块对中间代码进行语法分析最终获得双向token链表;采用缺陷模式匹配模块用于将双向token链表与缺陷模式进行对比,到其中匹配的部分,处理获得静态分析结果;在预处理模块中对源代码进行预处理时,将i++替换为(i=i+1)-1,将++i替换为i=i+1,将i--换为(i=i-1)+1,将--i替换为i=i-1;在缺陷模式匹配模块中增加如下正则表达式:if(%var%=%num%);if(%any%&%any%);scanf(%str%,%var%);其中%var%、%num%、%any%、%any%、%str%以及%var%均为变量。本发明可以提高整形溢出问题的准确度,降低漏报率,少人工检查的成本。
法律状态
法律状态公告日
法律状态信息
法律状态
权 利 要 求 说 明 书
1.一种基于代码替换和正则表达式的静态分析工具改进方法,所述静态分            析工具包括预处理模块、语法分析以及缺陷模式匹配模块,所述预处理模块用            于对源代码进行预处理,生成中间代码;所述语法分析模块用于对中间代码进            行语法分析最终获得双向token链表;所述缺陷模式匹配模块用于将所述双向            token链表与缺陷模式进行对比,到其中匹配的部分,处理获得静态分析结果;            其特征在于,在所述预处理模块中对源代码进行预处理时,对源代码中出现的            自增操作i++、++i与自减操作i--、--i进行如下替换:将i++替换为(i=i+1)-1,            将++i替换为i=i+1,将i--换为(i=i-1)+1,将--i替换为i=i-1;其中i为自增            操作或者自减操作的变量;           
在所述缺陷模式匹配模块中增加如下正则表达式:if(%var%=%num%);            if(%any%&%any%);scanf(%str%,%var%);           
其中%var%、%num%、%any%、%any%、%str%以及%var%均为变量;if            为源代码中的if语句,scanf为源代码中的scanf语句。           
2.如权利要求1所述的一种基于代码替换和正则表达式的静态分析工具改            进方法,其特征在于,所述预处理模块接收外部输入的包含源代码的文件,首            先将文件中的头文件和源代码进行组合,然后对源代码中出现的自增操作i++、            ++i与自减操作i--、--i进行替换之后,再对宏定义进行预处理,最终获得中间            代码。           
3.如权利要求1或2所述的一种基于代码替换和正则表达式的静态分析工            具改进方法,其特征在于,所述语法分析模块包括如下步骤:对中间代码首先            进行词法分析,是将由字符串序列组成的源代码划分创建一个用于存储token的            双向token链表,然后逐字节地读入源代码中的每个字符,并将其划分为一个个            完整的具有明确含义的最小化的单位token,然后将按照token在源代码中出现                            的顺序将所有的token添加到双向token链表中。           
4.如权利要求1或2所述的一种基于代码替换和正则表达式的静态分析工            具改进方法,其特征在于,所述缺陷模式包括在工业生产和软件开发中总结出            来的多种缺陷模式。           
说  明  书
<p>技术领域   
本发明属于计算机编程技术领域,具体涉及一种基于代码替换和正则表达式的静态分析工具改进方法。   
背景技术   
当前的静态分析工具的处理流程可以分为四个部分:预处理模块、语法分析模块、缺陷模式匹配模块、缺陷模式处理模块。待检测的工程文件或文件夹中的源代码首先经过预处理器的处理得到便于检测的中间代码。中间代码经过语法分析模块的处理,生成抽象语法树。然后缺陷模式匹配模块将已知的缺陷模式和抽象语法树进行匹配,检测其中的缺陷。检测到的缺陷通过缺陷定位和输出模块形成格式化的输出,根据用户的要求生成运行结果。   
其中各个模块的工作过程具体如下:   
预处理模块对源代码的处理主要包括三个部分:遍历各级目录获取待检测的包含源代码的文件列表,组合头文件和源代码文件,对宏定义进行预处理。其中第一个步骤是可选的,只有在输入是文件夹时才会启用。   
语法分析模块的主要功能是对经过预处理器处理过之后的代码进行语法分析,语法分析模块的主要工作包括词法分析、语法分析和语义分析三大部分。经过处理后的中间代码首先经过词法分析切割成一个个被称为“token”的最小化有意义的单位,然后通过语法分析建立起不同“token”之间的关系,建立起一个双向的“token”链表,最终针对“token”的双向链表进行语义分析,构造抽象语法树。   
缺陷模式匹配模块的主要功能是对经过语法分析模块处理之后生成的“token”双向链表进行分析,通过将在工业生产和软件开发中总结出来的多种缺陷模式与“token”双向列表进行对比,到其中匹配的部分,并且将结果交给缺陷处理模块进行处理。   
缺陷处理模块的主要功能,是针对缺陷模式匹配模块匹配到的缺陷模式以及“token”信息进行
处理,生成用户能够直观看出或者用户自定义格式的缺陷报告。该模块的主要工作包括两点,其中一点是根据缺陷模式匹配模块匹配到的缺陷模式以及“token”信息提取相关的缺陷类型、缺陷位置和缺陷相关变量等。另一点则是需要能够对上一步骤提取的缺陷类型、缺陷位置和缺陷相关变量进行处理,按照直观或者用户指定的格式来进行缺陷报告的生成,供用户对缺陷模式检测的结果进行分析。   
现有的静态分析工具在检测涉及自增自减操作的整形溢出问题上存在不足,漏报率较高,导致一些严重的缺陷不能及时发现,影响系统的稳定性。除此之外,当前的静态分析工具没有考虑到可能错误的键入这类问题,这类问题在日常编程中非常常见且无法被编译器检测出来,也不容易人工检查,所以由静态分析工具来实现这类问题的检查是非常有必要的。   
发明内容   
有鉴于此,本发明提供了一种基于代码替换和正则表达式的静态分析工具改进方法,本发明的目的是利用表达式替换来提高整形溢出问题的准确度,降低漏报率,同时使用正则表达式来匹配可能错误的键入的代码,降低因为疏忽写错代码带来的影响,减少人工检查的成本。   

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。