有效
一种项目级CPG文件生成方法、系统、设备及存储介质
刘强、李佳雯、张唯贞、付绍静、王怡琦、刘天瑞、姚欣、章润芃、王宇飞
中国人民解放军国防科技大学
刘
刘强 专利 60
中国人民解放军国防科技大学航空航天超音速飞机飞机与直升机
李
李佳雯 专利 2
中国人民解放军国防科技大学电子数据处理计算技术物理仪器
张
张唯贞 专利 4
中国人民解放军国防科技大学计算技术物理仪器电子数据处理
付
付绍静 专利 37
中国人民解放军国防科技大学计算机安全电子数据处理计算技术
王
王怡琦 专利 45
中国人民解放军国防科技大学计算模型系统生物模型计算电子数据处理
刘
刘天瑞 专利 9
中国人民解放军国防科技大学计算技术物理仪器图像增强复原
姚
姚欣 专利 2
中国人民解放军国防科技大学电子数据处理计算技术物理仪器
章
章润芃 专利 2
中国人民解放军国防科技大学电子数据处理计算技术物理仪器
王
王宇飞 专利 6
中国人民解放军国防科技大学物理仪器计算技术电子数据处理
摘要
本发明属于CPG文件生成领域,具体涉及一种项目级CPG文件生成方法、系统、设备及存储介质,其方法包括:根据筛选文件集,生成抽象语法树,遍历抽象语法树中生成作用域的节点,得到节点关系;根据抽象语法树以及节点关系,建立依赖边;根据抽象语法树进行分支结构、循环结构以及跳转结构处理,得到控制流边;遍历抽象语法树,建立依赖边,否则,将调用块位置及调用信息存入导入函数表,建立调用边,根据调用边、依赖边、控制流边以及基本块,得到单个CPG文件;根据抽象语法树生成文件索引结合单个CPG文件,生成项目级CPG文件。本申请具有为大规模Lua项目的静态分析提供结构化数据支持,可大幅提升其静态分析效率的效果。
1.一种项目级CPG文件生成方法,其特征是,包括:获取Lua脚本文件集,将Lua脚本文件集进行解析筛选,得到筛选文件集,筛选文件集中包括多个Lua脚本文件;根据所述筛选文件集,生成抽象语法树,遍历抽象语法树中生成作用域的节点,生成当前局部变量表快照,进入作用域时生成CPG子图,退出作用域时根据当前局部变量表快照恢复上层快照,得到节点关系;根据抽象语法树以及节点关系,将赋值语句节点的左值和右值对齐,建立依赖边;根据抽象语法树进行分支结构处理、循环结构处理以及跳转结构处理,得到控制流边;遍历抽象语法树,当检测到调用节点时,若被调对象为局部函数或被local修饰表中的成员函数,则拷贝局部函数或成员函数定义的CPG子图,并在调用块与函数入口块间建立函数依赖边,否则,将调用块位置及调用信息存入导入函数表,建立函数的调用边,所述被调对象存在于调用节点中,所述调用块通过被调对象生成,所述函数入口块通过局部函数或被local修饰表中的成员函数生成,所述函数依赖边表示程序执行时的跳转关系;根据调用边、依赖边、控制流边以及筛选文件集生成的基本块,得到每个Lua脚本文件对应的CPG文件;根据抽象语法树生成文件索引;根据文件索引以及每个Lua脚本文件对应的CPG文件,生成项目级CPG文件;所述根据文件索引以及每个Lua脚本文件对应的CPG文件,生成项目级CPG文件,包括:根据文件索引建立邻接矩阵,根据所述邻接矩阵以及每个Lua脚本文件对应的CPG文件建立依赖关系支配树;根据依赖关系支配树,得到全局拓扑关系;根据所述全局拓扑关系,生成项目级CPG文件;所述根据依赖关系支配树,得到全局拓扑关系,包括:根据所述文件索引,得到依赖目录;根据依赖目录,判断当前依赖是否存在于当前目录下;若当前依赖不存在于当前目录下,则判断当前依赖是否存在于递归子目录下;若当前依赖不存在于递归子目录下,则判断是否检索过全局变量;若检索过全局变量,则判断是否能回退父目录;若不能退回父目录,则依赖为C语言包或者缺失,得到根目录的拓扑关系;获取CPG子目录的拓扑关系;根据根目录的拓扑关系以及CPG子目录的拓扑关系,得到全局拓扑关系。
2.如权利要求1所述的项目级CPG文件生成方法,其特征是,根据所述筛选文件集,生成抽象语法树,包括:将筛选文件集进行解析,得到文件目录,所述文件目录包括根目录以及子目录;遍历根目录和子目录,保留有Lua脚本文件的有效目录;将有效目录按照层级大小进行编号,得到编号目录;根据所述编号目录依次取出目标目录创建文件树节点,并在文件树节点中储存Lua的路径信息,若目标目录没有父目录,则将目标目录挂载到根目录节点,若目标目录有父目录,则将目标目录挂载到父目录节点下,直至所有的编号目录被访问,所有的文件树节点组成文件树,所述文件树节点包括父目录节点和根目录节点。
3.如权利要求1所述的项目级CPG文件生成方法,其特征是,所述根据抽象语法树以及节点关系,将赋值语句节点的左值和右值对齐,建立依赖边,包括:根据抽象语法树以及节点关系,获取赋值节点;从所述赋值节点中提取赋值语句;将赋值语句中的左值和等号右侧的表达式对齐,得到对齐语句;判断对齐语句的左值是否是局部变量;若左值是局部变量,则根据当前作用域重命名;若左值不是局部变量,则创建CPG基本块并将从CPG基本块提取右侧的表达式;将右侧的表达式中局部变量重命名,判断右侧的表达式是否是函数调用;若右侧的表达式是函数调用,则建立依赖边。
4.如权利要求1所述的项目级CPG文件生成方法,其特征是,所述根据抽象语法树进行分支结构处理、循环结构处理以及跳转结构处理,得到控制流边,包括:根据抽象语法树进行分支结构处理包括:根据抽象语法树创建分叉控制流块和汇聚基本控制流块;将 指针指向分叉块,初始化 线性表,进入分叉块,若存在test指针,访问指向分支判断条件的抽象语法树的子树,然后创建分支的入口块并将test指针指向的抽象语法树的子树信息保存到基本控制流块,将 指针指向入口块;访问body指针指向的分支内部结构的抽象语法树子树,保存所生成CPG子图的出口控制流块到 线性表并将 指针指向分叉控制流块;若orelse指针不为空,则恢复上下文,访问orelse指针指向的下一个分支;若orelse指针为空,恢复上下文,退出当前分支,将 线性表中的所有基本控制流块与汇聚基本控制流块建立边,并将 指针指向汇聚基本控制流块;根据抽象语法树进行循环结构处理包括:根据抽象语法树创建起始基本控制流块和终止基本控制流块;将 指针指向起始基本控制流块,遍历test指针指向的判断条件,并将test指针的抽象语法树信息保存到入口块;访问body指针指向的抽象语法树子树,并生成对应的CPG子图,将CPG子图的出口控制流块与循环出口块添加控制流边;根据抽象语法树进行跳转结构处理包括:遍历抽象语法树,当遍历到goto结构时,创建goto控制流块,并检查哈希表中是否存在label标签所对应的目标基本控制流块,若存在则将目标基本控制流块与label标签对应的基本控制流块建立控制流依赖边;若不存在,则将该goto控制流块存放到哈希表label标签对应的线性表中;当遍历到label结构时,创建一个label控制流块,并将哈希表中label标签对应的线性表中所有的goto控制流块与label控制流块建立控制流依赖边,最后将label控制流块存放到哈希表中;根据抽象语法树进行分支结构处理、循环结构处理以及跳转结构处理,得到控制流边。
5.如权利要求1所述的方法,其特征是,获取CPG子目录的拓扑关系包括:若当前依赖存在于当前目录下或当前依赖存在于递归子目录下或未检索过全局变量且依赖存在于全局变量目录下,则保存依赖,在邻接矩阵建立边,得到CPG子目录的拓扑关系。
6.一种项目级CPG文件生成系统,其特征是,包括:获取模块,用于获取Lua脚本文件集,将Lua脚本文件集进行解析筛选,得到筛选文件集,筛选文件集中包括多个Lua脚本文件;遍历模块,用于根据筛选文件集,生成抽象语法树,遍历抽象语法树中生成作用域的节点,生成当前局部变量表快照,进入作用域时生成CPG子图,退出作用域时根据当前局部变量表快照恢复上层快照,得到节点关系;依赖边建立模块,用于根据抽象语法树以及节点关系,将赋值语句节点的左值和右值对齐,建立依赖边;控制流边建立模块, 用于根据抽象语法树进行分支结构处理、循环结构处理以及跳转结构处理,得到控制流边;调用边建立模块,用于遍历抽象语法树,当检测到调用节点时,若被调对象为局部函数或被local修饰表中的成员函数,则拷贝局部函数或成员函数定义的CPG子图,并在调用块与函数入口块间建立依赖边,否则,将调用块位置及调用信息存入导入函数表,建立函数的调用边,所述被调对象存在于调用节点中,所述调用块通过被调对象生成,所述函数入口块通过局部函数或被local修饰表中的成员函数生成;单文件生成模块,用于根据调用边、依赖边、控制流边以及筛选文件集生成的基本块,得到每个Lua脚本文件对应的CPG文件;索引模块,用于根据抽象语法树生成文件索引;项目级文件生成模块,用于根据文件索引以及每个Lua脚本文件对应的CPG文件,生成项目级CPG文件;所述根据文件索引以及每个Lua脚本文件对应的CPG文件,生成项目级CPG文件,包括:根据文件索引建立邻接矩阵,根据所述邻接矩阵以及每个Lua脚本文件对应的CPG文件建立依赖关系支配树;根据依赖关系支配树,得到全局拓扑关系;根据所述全局拓扑关系,生成项目级CPG文件;所述根据依赖关系支配树,得到全局拓扑关系,包括:根据所述文件索引,得到依赖目录;根据依赖目录,判断当前依赖是否存在于当前目录下;若当前依赖不存在于当前目录下,则判断当前依赖是否存在于递归子目录下;若当前依赖不存在于递归子目录下,则判断是否检索过全局变量;若检索过全局变量,则判断是否能回退父目录;若不能退回父目录,则依赖为C语言包或者缺失,得到根目录的拓扑关系;获取CPG子目录的拓扑关系;根据根目录的拓扑关系以及CPG子目录的拓扑关系,得到全局拓扑关系。
7.一种终端设备,包括存储器和处理器,其特征是,所述存储器储存有能够在处理器上运行的计算机程序,所述处理器加载并执行所述计算机程序时,采用如权利要求1至5中任一项所述的方法。
8.一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序,其特征是,所述计算机程序被处理器加载并执行时,采用如权利要求1至5中任一项所述的方法。



