【技术实现步骤摘要】
本专利技术涉及数据处理
,具体涉及一种文件扫描的方法及装置。
技术介绍
不基于编译的静态代码分析工具有着高效、不依赖编译环境、轻量化的优点。现有的不基于编译的静态分析工具(如cppcheck)的主要流程为:获取扫描路径配置,对每一个源文件进行预处理、对预处理后的字符串进行符号化处理、生成符号表、存储符号表、对生成的符号表进行检查。在预处理、符号化、生成符号表时,机制为线性单文件处理。因此难以处理跨文件场景,导致较多的误报和漏报。预处理不可控,因静态代码分析不依赖编译,无法获取编译器或环境变量里配置的include路径,因此需要用户手动配置依赖文件的目录。如果用户没有配置或配置不全,会使头文件未包含完整、宏定义找不到,导致宏无法正确展开或无法找到变量定义等一系列问题,从而引起较多的误报和漏报。
技术实现思路
本专利技术实施例提供一种文件扫描的方法,可以避免误报和漏报。本专利技术实施例还提供了相应的装置。本专利技术第一方面提供一种文件扫描的方法,包括:符号化主文件,生成主文件符号表;根据全局文件依赖关系,对所述主文件所依赖的依赖文件进行符号化,生成所述依赖文件的符 ...
【技术保护点】
一种文件扫描的方法,其特征在于,包括:符号化主文件,生成主文件符号表;根据全局文件依赖关系,对所述主文件所依赖的依赖文件进行符号化,生成所述依赖文件的符号表,所述全局文件依赖关系为根据所述主文件与所述依赖文件间的依赖语句建立的关系;为所述主文件符号表和所述依赖文件的符号表建立链接关系,得到统一符号表;扫描所述统一符号表,并输出扫描结果。
【技术特征摘要】
1.一种文件扫描的方法,其特征在于,包括:符号化主文件,生成主文件符号表;根据全局文件依赖关系,对所述主文件所依赖的依赖文件进行符号化,生成所述依赖文件的符号表,所述全局文件依赖关系为根据所述主文件与所述依赖文件间的依赖语句建立的关系;为所述主文件符号表和所述依赖文件的符号表建立链接关系,得到统一符号表;扫描所述统一符号表,并输出扫描结果。2.根据权利要求1所述的方法,其特征在于,所述根据全局文件依赖关系,对所述主文件所依赖的依赖文件进行符号化之前,所述方法还包括:遍历全局文件,分析所述全局文件的代码内容中标识依赖的语句,建立所述全局文件依赖关系,所述全局文件包括所述主文件和所述依赖文件。3.根据权利要求2所述的方法,其特征在于,所述遍历全局文件,分析所述全局文件的代码内容中标识依赖的语句,建立所述全局文件依赖关系,所述全局文件包括所述主文件和所述依赖文件,包括:从所述主文件的头文件中获取所述主文件所依赖的依赖文件名;根据所述依赖文件名,从已建立的文件名和文件信息的对应关系中查找所述依赖文件名对应的依赖文件信息;当查找到所述依赖文件名对应的依赖文件信息,则将所述依赖文件名对应的依赖文件加入所述主文件的依赖关系,根据每个主文件的依赖关系,建立所述全局文件依赖关系。4.根据权利要求1-3任一所述的方法,其特征在于,所述根据全局文件依赖关系,对所述主文件所依赖的依赖文件进行符号化,生成所述依赖文件的符号表,包括:根据全局文件依赖关系,确认所述主文件所依赖的依赖文件是否已经符号化;当所述依赖文件未被符号化,则符号化所述依赖文件,生成所述依赖文件的符号表,并缓存所述依赖文件的符号表;当所述依赖文件已被符号化,则从所述缓存中获取所述依赖文件的符号表。5.根据权利要求1-3任一所述的方法,其特征在于,所述为所述主文件符号表和所述依赖文件的符号表建立链接关系,得到统一符号表,包括:根据所述主文件符号表和所述依赖文件的符号表中的唯一变量标识,建立所述主文件符号表和所述依赖文件的符号表中特征参数的链接关系,得到统一符号表,所述唯一变量标识在所述主文件符号表和所述依赖文件的符号表中用于标识同一特征参数。6.根据权利要求1-3任一所述的方法,其特征在于,符号化所述主文件和所述依赖文件时,所述方法还包括:将所述主文件和所述依赖文件中的函数声明都记录在同一函数声明列表中;所述为所述主文件符号表和所述依赖文件的符号表建立链接关系,得到统一符号表,包括:根据所述同一函数声明列表,建立所述主文件的函数与所述依赖文件的函数声明之间的映射关系,得到统一符号表。7.一种文件扫描的装置,其特征在于,包括:第一处理单元...
【专利技术属性】
技术研发人员:张蓓,梅维一,严明,魏学峰,
申请(专利权)人:腾讯科技深圳有限公司,
类型:发明
国别省市:广东;44
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。