一种文件扫描的方法及装置制造方法及图纸

技术编号:14738809 阅读:74 留言:0更新日期:2017-03-01 12:28
本发明专利技术公开了一种文件扫描的方法,包括:符号化主文件,生成主文件符号表;根据全局文件依赖关系,对所述主文件所依赖的依赖文件进行符号化,生成所述依赖文件的符号表,所述全局文件依赖关系为根据所述主文件与所述依赖文件间的依赖语句建立的关系;为所述主文件符号表和所述依赖文件的符号表建立链接关系,得到统一符号表;扫描所述统一符号表,并输出扫描结果。本发明专利技术实施例提供的文件扫描的方法,通过文件依赖关系,扫描文件时可以扫描所有有依赖关系的文件的统一符号表,从而有效的避免了误报和漏报。

【技术实现步骤摘要】

本专利技术涉及数据处理
,具体涉及一种文件扫描的方法及装置
技术介绍
不基于编译的静态代码分析工具有着高效、不依赖编译环境、轻量化的优点。现有的不基于编译的静态分析工具(如cppcheck)的主要流程为:获取扫描路径配置,对每一个源文件进行预处理、对预处理后的字符串进行符号化处理、生成符号表、存储符号表、对生成的符号表进行检查。在预处理、符号化、生成符号表时,机制为线性单文件处理。因此难以处理跨文件场景,导致较多的误报和漏报。预处理不可控,因静态代码分析不依赖编译,无法获取编译器或环境变量里配置的include路径,因此需要用户手动配置依赖文件的目录。如果用户没有配置或配置不全,会使头文件未包含完整、宏定义找不到,导致宏无法正确展开或无法找到变量定义等一系列问题,从而引起较多的误报和漏报。
技术实现思路
本专利技术实施例提供一种文件扫描的方法,可以避免误报和漏报。本专利技术实施例还提供了相应的装置。本专利技术第一方面提供一种文件扫描的方法,包括:符号化主文件,生成主文件符号表;根据全局文件依赖关系,对所述主文件所依赖的依赖文件进行符号化,生成所述依赖文件的符号表,所述全局文件依赖关系为根据所述主文件与所述依赖文件间的依赖语句建立的关系;为所述主文件符号表和所述依赖文件的符号表建立链接关系,得到统一符号表;扫描所述统一符号表,并输出扫描结果。本专利技术第二方面提供一种文件扫描的装置,包括:第一处理单元,用于符号化主文件,生成主文件符号表;第二处理单元,用于根据全局文件依赖关系,对所述主文件所依赖的依赖文件进行符号化,生成所述依赖文件的符号表,所述全局文件依赖关系为根据所述主文件与所述依赖文件间的依赖语句建立的关系;链接建立单元,用于为所述第一处理单元处理得到的所述主文件符号表和所述第二处理单元处理得到的所述依赖文件的符号表建立链接关系,得到统一符号表;扫描单元,用于扫描所述链接建立单元建立的所述统一符号表;输出单元,用于输出所述扫描单元扫描所述统一符号的扫描结果。本专利技术实施例采用符号化主文件,生成主文件符号表;根据全局文件依赖关系,对所述主文件所依赖的依赖文件进行符号化,生成所述依赖文件的符号表,所述全局文件依赖关系为根据所述主文件与所述依赖文件间的依赖语句建立的关系;为所述主文件符号表和所述依赖文件的符号表建立链接关系,得到统一符号表;扫描所述统一符号表,并输出扫描结果。与现有技术中因跨文件场景的文件扫描时误报漏报较多相比,本专利技术实施例提供的文件扫描的方法,通过文件依赖关系,扫描文件时可以扫描所有有依赖关系的文件的统一符号表,从而有效的避免了误报和漏报。附图说明为了更清楚地说明本专利技术实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本专利技术的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1是本专利技术实施例中文件扫描的方法的一实施例示意图;图2是本专利技术实施例中一示例的一示意图;图3是本专利技术实施例中一示例的另一示意图;图4是本专利技术实施例中一示例的另一示意图;图5是本专利技术实施例中一示例的另一示意图;图6是本专利技术实施例中一示例的另一示意图;图7是本专利技术实施例中一示例的另一示意图;图8是本专利技术实施例中一示例的另一示意图;图9是本专利技术实施例中文件扫描的方法的另一实施例示意图;图10是本专利技术实施例中文件扫描的装置的一实施例示意图;图11是本专利技术实施例中文件扫描的装置的另一实施例示意图;图12是本专利技术实施例中文件扫描的装置的另一实施例示意图;图13是本专利技术实施例中文件扫描的装置的另一实施例示意图;图14是本专利技术实施例中文件扫描的装置的另一实施例示意图;图15是本专利技术实施例中文件扫描的装置的另一实施例示意图。具体实施方式本专利技术实施例提供一种文件扫描的方法,可以避免误报和漏报。本专利技术实施例还提供了相应的装置。以下分别进行详细说明。下面将结合本专利技术实施例中的附图,对本专利技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本专利技术一部分实施例,而不是全部的实施例。基于本专利技术中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本专利技术保护的范围。参阅图1,本专利技术实施例提供的文件扫描的方法的一实施例包括:101、符号化主文件,生成主文件符号表。本专利技术实施例中的文件指的源文件,而非其他类型文件源文件就是用汇编语言或高级语言写出来的代码保存为文件后的结果。本专利技术实施例中,符号化主文件是指对主文件进行符号化处理,生成主文件对应的符号表的过程,文件符号化的过程属于现有技术,本专利技术实施例中不做过多赘述。主文件在本专利技术实施例中是相对于依赖文件而言的,如图2所示,文件file1可以理解为是主文件。file2、file3以及图2所示的其他文件都可以理解为是file1的依赖文件。102、根据全局文件依赖关系,对所述主文件所依赖的依赖文件进行符号化,生成所述依赖文件的符号表,所述全局文件依赖关系为根据所述主文件与所述依赖文件间的依赖语句建立的关系。本专利技术实施例中,对所述主文件所依赖的依赖文件进行符号化,生成所述依赖文件的符号表参阅图2可以理解为是对file2、file3以及图2所示的其他文件进行符号化。本专利技术实施例中不限定步骤101和步骤102的时序,任一在前执行都可以,也可以同时执行。103、为所述主文件符号表和所述依赖文件的符号表建立链接关系,得到统一符号表。主文件符号表和依赖文件的符号表通过链接关系联系到一起,这样扫描时就可以实现跨文件扫描,而不限于只扫描单独文件的符号表。104、扫描所述统一符号表,并输出扫描结果。如图3所示,A.cpp中调用了B.cpp的BFunc函数,将常量i值为5作为BFunc函数的参数。BFunc函数实现用参数i访问数组a,数组大小为3,此时i超出了数组的上限,则会造成溢出。如果cppcheck在单独扫描B.cpp时,因并不知道传入的参数i值为5,所以不会报错,从而产生漏报。而本专利技术实施例中,A.cpp和B.cpp之间建立了链接,会依次扫描A.cpp和B.cpp,则避免了漏报,输出i值为5存在错误的扫描结果。本专利技术实施例采用符号化主文件,生成主文件符号表;根据全局文件依赖关系,对所述主文件所依赖的依赖文件进行符号化,生成所述依赖文件的符号表,所述全局文件依赖关系为根据所述主文件与所述依赖文件间的依赖语句建立的关系;为所述主文件符号表和所述依赖文件的符号表建立链接关系,得到统一符号表;扫描所述统一符号表,并输出扫描结果。与现有技术中因跨文件场景的文件扫描时误报漏报较多相比,本专利技术实施例提供的文件扫描的方法,通过文件依赖关系,扫描文件时可以扫描所有有依赖关系的文件的统一符号表,从而有效的避免了误报和漏报。可选地,在上述图1对应的实施例的基础上,本专利技术实施例提供的文件扫描的方法的第一个可选实施例中,所述根据全局文件依赖关系,对所述主文件所依赖的依赖文件进行符号化之前,所述方法还可以包括:遍历全局文件,分析所述全局文件的代码内容中标识依赖的语句,建立所述全局文件依赖关系,所述全局文件包括所述主文件和所述依赖文件。本专利技术实施例中,文件间如果有依赖关系,本文档来自技高网...
一种文件扫描的方法及装置

【技术保护点】
一种文件扫描的方法,其特征在于,包括:符号化主文件,生成主文件符号表;根据全局文件依赖关系,对所述主文件所依赖的依赖文件进行符号化,生成所述依赖文件的符号表,所述全局文件依赖关系为根据所述主文件与所述依赖文件间的依赖语句建立的关系;为所述主文件符号表和所述依赖文件的符号表建立链接关系,得到统一符号表;扫描所述统一符号表,并输出扫描结果。

【技术特征摘要】
1.一种文件扫描的方法,其特征在于,包括:符号化主文件,生成主文件符号表;根据全局文件依赖关系,对所述主文件所依赖的依赖文件进行符号化,生成所述依赖文件的符号表,所述全局文件依赖关系为根据所述主文件与所述依赖文件间的依赖语句建立的关系;为所述主文件符号表和所述依赖文件的符号表建立链接关系,得到统一符号表;扫描所述统一符号表,并输出扫描结果。2.根据权利要求1所述的方法,其特征在于,所述根据全局文件依赖关系,对所述主文件所依赖的依赖文件进行符号化之前,所述方法还包括:遍历全局文件,分析所述全局文件的代码内容中标识依赖的语句,建立所述全局文件依赖关系,所述全局文件包括所述主文件和所述依赖文件。3.根据权利要求2所述的方法,其特征在于,所述遍历全局文件,分析所述全局文件的代码内容中标识依赖的语句,建立所述全局文件依赖关系,所述全局文件包括所述主文件和所述依赖文件,包括:从所述主文件的头文件中获取所述主文件所依赖的依赖文件名;根据所述依赖文件名,从已建立的文件名和文件信息的对应关系中查找所述依赖文件名对应的依赖文件信息;当查找到所述依赖文件名对应的依赖文件信息,则将所述依赖文件名对应的依赖文件加入所述主文件的依赖关系,根据每个主文件的依赖关系,建立所述全局文件依赖关系。4.根据权利要求1-3任一所述的方法,其特征在于,所述根据全局文件依赖关系,对所述主文件所依赖的依赖文件进行符号化,生成所述依赖文件的符号表,包括:根据全局文件依赖关系,确认所述主文件所依赖的依赖文件是否已经符号化;当所述依赖文件未被符号化,则符号化所述依赖文件,生成所述依赖文件的符号表,并缓存所述依赖文件的符号表;当所述依赖文件已被符号化,则从所述缓存中获取所述依赖文件的符号表。5.根据权利要求1-3任一所述的方法,其特征在于,所述为所述主文件符号表和所述依赖文件的符号表建立链接关系,得到统一符号表,包括:根据所述主文件符号表和所述依赖文件的符号表中的唯一变量标识,建立所述主文件符号表和所述依赖文件的符号表中特征参数的链接关系,得到统一符号表,所述唯一变量标识在所述主文件符号表和所述依赖文件的符号表中用于标识同一特征参数。6.根据权利要求1-3任一所述的方法,其特征在于,符号化所述主文件和所述依赖文件时,所述方法还包括:将所述主文件和所述依赖文件中的函数声明都记录在同一函数声明列表中;所述为所述主文件符号表和所述依赖文件的符号表建立链接关系,得到统一符号表,包括:根据所述同一函数声明列表,建立所述主文件的函数与所述依赖文件的函数声明之间的映射关系,得到统一符号表。7.一种文件扫描的装置,其特征在于,包括:第一处理单元...

【专利技术属性】
技术研发人员:张蓓梅维一严明魏学峰
申请(专利权)人:腾讯科技深圳有限公司
类型:发明
国别省市:广东;44

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1