logo好方法网

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


技术摘要:
本发明属于计算机应用技术领域,特别涉及一种基于代码行为单位的程序变量有效定义检测方法及装置,该方法包含:收集代码样本数据集;提取代码样本数据集中代码抽象语法树,并生成控制流图;遍历控制流图中每行代码,构建各行代码变量的有效定义集合;依据有效定义集合  全部
背景技术:
代码是由程序员用开发工具所支持的语言编写出来的源文件,是一组由字符、符 号或信号码元以离散形式表示信息的明确的规则体系。代码设计的原则包括唯一确定性、 标准化和通用性、可扩充性与稳定性、便于识别与记忆、力求短小与格式统一以及容易修改 等。在实际应用中,为确保代码的可用性,需要在代码完成开发之后,对代码进行检测,代码 检测过程中较为关键的即为程序变量有效定义检测,通过检测以发现代码中存在的问题, 便于代码漏洞分析,进而进一步完善代码,保证代码质量。现有技术中代码检测方法包含代 码扫描和代码检查。其中,代码扫描仅用于验证代码是否符合规范、语法等问题,难以发现 代码中存在的实际漏洞。代码检查可用于发现代码在逻辑、设计上存在的问题,但实施成本 较高。因此,如何通过低成本代码检测以发现代码中存在的实际漏洞,成为程序开发应用过 程中亟待解决的问题。
技术实现要素:
为此,本发明提供一种基于代码行为单位的程序变量有效定义检测方法及装置, 大大降低计算量,实现自动、批量的程序变量有效定义检测,效率高,通用性、适用性强。 按照本发明所提供的设计方案,一种基于代码行为单位的程序变量有效定义检测 方法,包含: A)收集用于检测的代码样本数据集; B)针对代码样本数据集,提取代码抽象语法树,并生成控制流图; C)遍历控制流图中每行代码,构建各行代码变量的有效定义集合; D)依据有效定义集合,分析各行代码的输入集合,构建每个定义变量的使用-定义 链,该使用-定义链用于检测代码函数及相关联的有效变量定义。 上述的,B)中,控制流图表示程序代码在执行过程中所有可能的执行路径。 上述的,B)中,控制流图包含表示进入控制流图的入口块、表示基本块的节点、表 示控制流传递关系的边和表示控制流图流出的出口块。 上述的,C)中,根据控制流某条路径执行过程中,将对于执行过程中执行点的所有 定义过且没有被重新复制的变量定义作为有效定义,依据该有效定义构建每行代码的有效 定义集合。 上述的,C)中,有效定义集合依据变量使用和定义分为输入集合、输出集合、生成 集合和销毁集合,其中,每行代码中,所有进来的变量定义归类到输入集合,通过控制流进 来的变量定义且未被当前行代码重写或销毁、以及当前行变量定义归类到输出集合,当前 行代码变量定义归类到生成集合,当前行代码重写的来自于其他地方的定义变量归类到销 4 CN 111611149 A 说 明 书 2/7 页 毁集。 优选的,将输入集合、输出集合、生成集合和销毁集合表示成位向量,代码中发生 的每个赋值对应唯一标志位。 上述的,C)中,遍历每一行代码,对有效定义集合进行初始化,并将代码块改变状 态设置为逻辑真值;执行循环过程,该循环过程包含如下内容:判断代码块改变状态是否为 逻辑真值,若不是,则结束循环,并输出有效定义集合,否则,将其设置为逻辑假值,遍历代 码块中每一行代码,将当前代码行的输入集合的值设置为上一行代码输出集合值,将当前 代码行的输出集合复制给临时变量,将当前代码行的生成集合和输入集合值相加并减去销 毁集合值,将运算结果重新复制给输出集合,判断该重新复制的输出集合值是否与临时变 量相等,若不等,则设置代码块改变状态为逻辑真值,返回循环过程开始段,重新执行,若相 等,则结束循环,输出有效定义集合。 一种基于代码行为单位的程序变量有效定义检测装置,包含:收集模块、提取模 块、遍历模块和构建模块,其中, 收集模块,用于收集用于检测的代码样本数据集; 提取模块,用于针对代码样本数据集,提取代码抽象语法树,并生成控制流图; 遍历模块,用于遍历控制流图中每行代码,构建各行代码变量的有效定义集合; 构建模块,用于依据有效定义集合,分析各行代码的输入集合,构建每个定义变量 的使用-定义链,该使用-定义链用于检测代码函数及相关联的有效变量定义。 上述的装置中,遍历模块中,有效定义集合依据变量使用和定义分为输入集合、输 出集合、生成集合和销毁集合,其中,每行代码中,所有进来的变量定义归类到输入集合,通 过控制流进来的变量定义且未被当前行代码重写或销毁、以及当前行变量定义归类到输出 集合,当前行代码变量定义归类到生成集合,当前行代码重写的来自于其他地方的定义变 量归类到销毁集合。 上述的装置中,遍历模块包含初始化子模块和循环执行子模块,其中, 初始化子模块,用于遍历每一行代码,对有效定义集合进行初始化,并将代码块改 变状态设置为逻辑真值; 循环执行子模块,用于依据代码块改变状态执行有效定义集合获取的循环过程, 该循环过程包含如下内容:判断代码块改变状态是否为逻辑真值,若不是,则结束循环,并 输出有效定义集合,否则,将其设置为逻辑假值,遍历代码块中每一行代码,将当前代码行 的输入集合的值设置为上一行代码输出集合值,将当前代码行的输出集合复制给临时变 量,将当前代码行的生成集合和输入集合值相加并减去销毁集合值,将运算结果重新复制 给输出集合,判断该重新复制的输出集合值是否与临时变量相等,若不等,则设置代码块改 变状态为逻辑真值,返回循环过程开始段,重新执行,若相等,则结束循环,输出有效定义集 合。 本发明的有益效果: 本发明基于抽象语法树生成代码控制流图,根据控制流图路径执行过程变量定义 和改变情况,以代码行为单位进行变量有效定义检测,有效提高代码检测效率和质量,便于 程序代码漏洞检测,对网络安全应用具有重要的意义。 5 CN 111611149 A 说 明 书 3/7 页 附图说明: 图1为实施例中检测方法流程图; 图2为实施例中检测装置示意图; 图3为实施例中遍历模块示意图。
下载此资料需消耗2积分,
分享到:
收藏