基于代码行为单位的程序变量有效定义检测方法及装置制造方法及图纸

技术编号:25479155 阅读:15 留言:0更新日期:2020-09-01 23:00
本发明专利技术属于计算机应用技术领域,特别涉及一种基于代码行为单位的程序变量有效定义检测方法及装置,该方法包含:收集代码样本数据集;提取代码样本数据集中代码抽象语法树,并生成控制流图;遍历控制流图中每行代码,构建各行代码变量的有效定义集合;依据有效定义集合,分析各行代码的输入集合,构建每个定义变量的使用‑定义链,该使用‑定义链用于检测代码函数及相关联的有效变量定义。本发明专利技术中基于抽象语法树生成代码控制流图,根据控制流图路径执行过程变量定义和改变情况,以代码行为单位进行变量有效定义检测,实现自动、批量的程序变量有效定义检测,有效提高代码检测效率和质量,便于程序代码漏洞检测,对网络安全应用具有重要的意义。

【技术实现步骤摘要】
基于代码行为单位的程序变量有效定义检测方法及装置
本专利技术属于计算机应用
,特别涉及一种基于代码行为单位的程序变量有效定义检测方法及装置。
技术介绍
代码是由程序员用开发工具所支持的语言编写出来的源文件,是一组由字符、符号或信号码元以离散形式表示信息的明确的规则体系。代码设计的原则包括唯一确定性、标准化和通用性、可扩充性与稳定性、便于识别与记忆、力求短小与格式统一以及容易修改等。在实际应用中,为确保代码的可用性,需要在代码完成开发之后,对代码进行检测,代码检测过程中较为关键的即为程序变量有效定义检测,通过检测以发现代码中存在的问题,便于代码漏洞分析,进而进一步完善代码,保证代码质量。现有技术中代码检测方法包含代码扫描和代码检查。其中,代码扫描仅用于验证代码是否符合规范、语法等问题,难以发现代码中存在的实际漏洞。代码检查可用于发现代码在逻辑、设计上存在的问题,但实施成本较高。因此,如何通过低成本代码检测以发现代码中存在的实际漏洞,成为程序开发应用过程中亟待解决的问题。
技术实现思路
为此,本专利技术提供一种基于代码行为单位的程序变量有效定义检测方法及装置,大大降低计算量,实现自动、批量的程序变量有效定义检测,效率高,通用性、适用性强。按照本专利技术所提供的设计方案,一种基于代码行为单位的程序变量有效定义检测方法,包含:A)收集用于检测的代码样本数据集;B)针对代码样本数据集,提取代码抽象语法树,并生成控制流图;C)遍历控制流图中每行代码,构建各行代码变量的有效定义集合;D)依据有效定义集合,分析各行代码的输入集合,构建每个定义变量的使用-定义链,该使用-定义链用于检测代码函数及相关联的有效变量定义。上述的,B)中,控制流图表示程序代码在执行过程中所有可能的执行路径。上述的,B)中,控制流图包含表示进入控制流图的入口块、表示基本块的节点、表示控制流传递关系的边和表示控制流图流出的出口块。上述的,C)中,根据控制流某条路径执行过程中,将对于执行过程中执行点的所有定义过且没有被重新复制的变量定义作为有效定义,依据该有效定义构建每行代码的有效定义集合。上述的,C)中,有效定义集合依据变量使用和定义分为输入集合、输出集合、生成集合和销毁集合,其中,每行代码中,所有进来的变量定义归类到输入集合,通过控制流进来的变量定义且未被当前行代码重写或销毁、以及当前行变量定义归类到输出集合,当前行代码变量定义归类到生成集合,当前行代码重写的来自于其他地方的定义变量归类到销毁集。优选的,将输入集合、输出集合、生成集合和销毁集合表示成位向量,代码中发生的每个赋值对应唯一标志位。上述的,C)中,遍历每一行代码,对有效定义集合进行初始化,并将代码块改变状态设置为逻辑真值;执行循环过程,该循环过程包含如下内容:判断代码块改变状态是否为逻辑真值,若不是,则结束循环,并输出有效定义集合,否则,将其设置为逻辑假值,遍历代码块中每一行代码,将当前代码行的输入集合的值设置为上一行代码输出集合值,将当前代码行的输出集合复制给临时变量,将当前代码行的生成集合和输入集合值相加并减去销毁集合值,将运算结果重新复制给输出集合,判断该重新复制的输出集合值是否与临时变量相等,若不等,则设置代码块改变状态为逻辑真值,返回循环过程开始段,重新执行,若相等,则结束循环,输出有效定义集合。一种基于代码行为单位的程序变量有效定义检测装置,包含:收集模块、提取模块、遍历模块和构建模块,其中,收集模块,用于收集用于检测的代码样本数据集;提取模块,用于针对代码样本数据集,提取代码抽象语法树,并生成控制流图;遍历模块,用于遍历控制流图中每行代码,构建各行代码变量的有效定义集合;构建模块,用于依据有效定义集合,分析各行代码的输入集合,构建每个定义变量的使用-定义链,该使用-定义链用于检测代码函数及相关联的有效变量定义。上述的装置中,遍历模块中,有效定义集合依据变量使用和定义分为输入集合、输出集合、生成集合和销毁集合,其中,每行代码中,所有进来的变量定义归类到输入集合,通过控制流进来的变量定义且未被当前行代码重写或销毁、以及当前行变量定义归类到输出集合,当前行代码变量定义归类到生成集合,当前行代码重写的来自于其他地方的定义变量归类到销毁集合。上述的装置中,遍历模块包含初始化子模块和循环执行子模块,其中,初始化子模块,用于遍历每一行代码,对有效定义集合进行初始化,并将代码块改变状态设置为逻辑真值;循环执行子模块,用于依据代码块改变状态执行有效定义集合获取的循环过程,该循环过程包含如下内容:判断代码块改变状态是否为逻辑真值,若不是,则结束循环,并输出有效定义集合,否则,将其设置为逻辑假值,遍历代码块中每一行代码,将当前代码行的输入集合的值设置为上一行代码输出集合值,将当前代码行的输出集合复制给临时变量,将当前代码行的生成集合和输入集合值相加并减去销毁集合值,将运算结果重新复制给输出集合,判断该重新复制的输出集合值是否与临时变量相等,若不等,则设置代码块改变状态为逻辑真值,返回循环过程开始段,重新执行,若相等,则结束循环,输出有效定义集合。本专利技术的有益效果:本专利技术基于抽象语法树生成代码控制流图,根据控制流图路径执行过程变量定义和改变情况,以代码行为单位进行变量有效定义检测,有效提高代码检测效率和质量,便于程序代码漏洞检测,对网络安全应用具有重要的意义。附图说明:图1为实施例中检测方法流程图;图2为实施例中检测装置示意图;图3为实施例中遍历模块示意图。具体实施方式:为使本专利技术的目的、技术方案和优点更加清楚、明白,下面结合附图和技术方案对本专利技术作进一步详细的说明。针对现有网络安全应用过程中代码检测成本高、检测效率不理想等情形,本专利技术实施例中,参见图1所示,提供一种基于代码行为单位的程序变量有效定义检测方法,包含如下内容:S101)收集用于检测的代码样本数据集;S102)针对代码样本数据集,提取代码抽象语法树,并生成控制流图;S103)遍历控制流图中每行代码,构建各行代码变量的有效定义集合;S104)依据有效定义集合,分析各行代码的输入集合,构建每个定义变量的使用-定义链,该使用-定义链用于检测代码函数及相关联的有效变量定义。抽象语法树(abstractsyntaxtree或者缩写为AST),或者语法树(syntaxtree),是源代码的抽象语法结构的树状表现形式,树上的每个节点都表示源代码中的一种结构。之所以说语法是“抽象”的,是因为这里的语法并不会表示出真实语法中出现的每个细节。比如,嵌套括号被隐含在树的结构中,并没有以节点的形式呈现;而类似于if-condition-then这样的条件跳转语句,可以使用带有两个分支的节点来表示。抽象语法树的结构不依赖于源语言的文法,也就是语法分析阶段所采用的上下文无关文法。抽象语法树(AbstractS本文档来自技高网...

【技术保护点】
1.一种基于代码行为单位的程序变量有效定义检测方法,其特征在于,包含:/nA)收集用于检测的代码样本数据集;/nB)针对代码样本数据集,提取代码抽象语法树,并生成控制流图;/nC)遍历控制流图中每行代码,构建各行代码变量的有效定义集合;/nD)依据有效定义集合,分析各行代码的输入集合,构建每个定义变量的使用-定义链,该使用-定义链用于检测代码函数及相关联的有效变量定义。/n

【技术特征摘要】
1.一种基于代码行为单位的程序变量有效定义检测方法,其特征在于,包含:
A)收集用于检测的代码样本数据集;
B)针对代码样本数据集,提取代码抽象语法树,并生成控制流图;
C)遍历控制流图中每行代码,构建各行代码变量的有效定义集合;
D)依据有效定义集合,分析各行代码的输入集合,构建每个定义变量的使用-定义链,该使用-定义链用于检测代码函数及相关联的有效变量定义。


2.根据权利要求1所述的基于代码行为单位的程序变量有效定义检测方法,其特征在于,B)中,控制流图表示程序代码在执行过程中所有可能的执行路径。


3.根据权利要求1或2所述的基于代码行为单位的程序变量有效定义检测方法,B)中,控制流图包含表示进入控制流图的入口块、表示基本块的节点、表示控制流传递关系的边和表示控制流图流出的出口块。


4.根据权利要求1所述的基于代码行为单位的程序变量有效定义检测方法,其特征在于,C)中,根据控制流某条路径执行过程中,将对于执行过程中执行点的所有定义过且没有被重新复制的变量定义作为有效定义,依据该有效定义构建每行代码的有效定义集合。


5.根据权利要求1或4所述的基于代码行为单位的程序变量有效定义检测方法,其特征在于,C)中,有效定义集合依据变量使用和定义分为输入集合、输出集合、生成集合和销毁集合,其中,每行代码中,所有进来的变量定义归类到输入集合,通过控制流进来的变量定义且未被当前行代码重写或销毁、以及当前行变量定义归类到输出集合,当前行代码变量定义归类到生成集合,当前行代码重写的来自于其他地方的定义变量归类到销毁集合。


6.根据权利要求5所述的基于代码行为单位的程序变量有效定义检测方法,其特征在于,将输入集合、输出集合、生成集合和销毁集合表示成位向量,代码中发生的每个赋值对应唯一标志位。


7.根据权利要求5所述的基于代码行为单位的程序变量有效定义检测方法,其特征在于,C)中,遍历每一行代码,对有效定义集合进行初始化,并将代码块改变状态设置为逻辑真值;执行循环过程,该循环过程包含如下内容:判断代码块改变状态是否为逻辑真值,若不是,则结束循环,并输出有效定义集合,否则,将其设置为逻辑假值,遍历代码块中每一行代码,将当前代码行的输入集合的值设置为上一...

【专利技术属性】
技术研发人员:孟罡王磊沈亮孙振赵荣彩
申请(专利权)人:上海信息安全工程技术研究中心
类型:发明
国别省市:上海;31

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

1