预览加载中,请您耐心等待几秒...
1/9
2/9
3/9
4/9
5/9
6/9
7/9
8/9
9/9

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

(19)国家知识产权局(12)发明专利申请(10)申请公布号CN115658508A(43)申请公布日2023.01.31(21)申请号202211323819.2(22)申请日2022.10.28(71)申请人北京轩宇信息技术有限公司地址101300北京市顺义区高丽营镇文化营村北(临空二路1号)(72)发明人陈睿王峥贾春鹏丁戈肖志恒王博祥于婷婷高栋栋(51)Int.Cl.G06F11/36(2006.01)G06F8/41(2018.01)权利要求书2页说明书5页附图1页(54)发明名称提升源代码静态分析工具鲁棒性的方法(57)摘要本发明公开了提升源代码静态分析工具鲁棒性的方法,包括以下步骤:步骤一,设计鲁棒性编译前端;步骤二,设计语法转译器;步骤三,提升原分析工具的鲁棒性;步骤四,添加零配置;所述步骤1.2中,词法解析模块预留了nextToken接口可供子类实现;本发明通过实现鲁棒性编译前端生成AST,并将该AST转译成原分析工具的AST,复用已有分析工具的代码分析能力,该编译前端内置了可扩展的预处理模块,拥有较强的编译错误恢复能力,较强的可扩展性,能够保证在复用已有代码资产的前提下,提高分析工具的鲁棒性,在被测软件不完整配置的分析条件下,仍能给出准确的分析结果,降低了静态分析工具使用者的门槛,提升工具的用户体验。CN115658508ACN115658508A权利要求书1/2页1.提升源代码静态分析工具鲁棒性的方法,包括以下步骤:步骤一,设计鲁棒性编译前端;步骤二,设计语法转译器;步骤三,提升原分析工具的鲁棒性;步骤四,添加零配置;其特征在于:其中在上述步骤一中,包括以下步骤:1.1设计鲁棒性编译前端中词法分析模块的预处理功能,即语法解析模块根据不同的预处理指令,执行不同的流程;1.2设计鲁棒性编译前端中词法分析模块的词法分析功能,即根据预先设计的Token匹配状态机,词法分析模块将预处理后的字符流切分为Token流,每个Token为最小的一个语法单元;1.3设计鲁棒性编译前端中语法解析模块的语法解析功能,即语法解析模块能将词法解析的Token流作为输入,并利用递归下降的方法进行语法解析,生成抽象语法树AST;1.4实现上述步骤1.1、步骤1.2和步骤1.3的各模块功能后,得到鲁棒性编译前端;其中在上述步骤二中,针对步骤1.3中生成的AST,实现一套访问者设计模式接口,语法转译器将AST作为输入,利用访问者设计模式,对该AST的每个语法结构进行转译处理,转换成已有分析工具编译前端的AST结构,以此复用已有的静态代码分析模块,保证功能的稳定性;其中在上述步骤三中,将步骤一中所设计的鲁棒性编译前端,以及步骤二中所设计的转译器模块添加到原分析工具的分析模块;其中在上述步骤四中,完成步骤三后,在原分析工具中添加启用零配置分析的条件入口,对原分析工具完成鲁棒性分析的扩展支持,得到鲁棒性静态分析器。2.根据权利要求1所述的提升源代码静态分析工具鲁棒性的方法,其特征在于:所述步骤1.1中,词法分析模块的预处理功能包括以下三点:一是对于宏定义指令,利用宏定义解析器对其进行解析并保存到词法解析的上下文索引中,后续解析遇到可替换的宏标识符时,则查询已经记录的索引并进行宏替换;如果未查询到宏定义,则安全地将其作为一个标识符处理;二是对于头文件包含指令,按照被测文件所在目录的路径以及被包含头文件的字符串进行拼接,如果定位到头文件,则递归对该文件进行预处理和解析,否则记录编译错误信息,并安全地继续解析后续代码;三是对于条件编译指令,引用宏定义的上下文索引对其解释。3.根据权利要求1所述的提升源代码静态分析工具鲁棒性的方法,其特征在于:所述步骤1.2中,词法解析模块预留了nextToken接口可供子类实现。4.根据权利要求1所述的提升源代码静态分析工具鲁棒性的方法,其特征在于:所述步骤1.3中,语法解析模块兼容C99/GNUC和C++11语法。5.根据权利要求1所述的提升源代码静态分析工具鲁棒性的方法,其特征在于:所述步骤1.3中,语法解析模块具备以下特性:一是歧义语法解析,即语法解析模块在解析时会遇到有歧义的语法,此时先将其记录,待整个语法解析结束时,根据已经解析的上下文符号信息进行推测,并对有歧义的语法结构进行重写;二是错误恢复,即遇到语法解析错误时,回溯到合理的语法结构,并记录解析错误信息;三是可扩展,即将C/C++语言公共的语法解析子程序作为顶层基类的实现,将C/C++语言特性相关的解析子程序交由子类去实现,并将递归下降子程序细化到相对小的方法单元,针对新的方言进行解析器扩展时,只需重写需要2CN115658508A权利要求书2/2页特殊处理的递归下降子程序,这样能够以较低成本完成对新方言的兼容。6.根据权利要求1所述的提升源代码静态分析工