光一样的少年|大规模下加速源代码分析( 二 )
图 1 来自 Apache Tomcat GitHub 项目的代码片段 。
为了详细说明 , 让我们重新审视 API 前提条件挖掘示例 。 让我们考虑一下 , 我们想挖掘 substring(int , int)API 方法的 API 前提条件 。 图 1 显示了示例客户端方法 , 该方法在第 7 行调用 substring(int , int)API 方法 。 此 API 方法调用由第六行的条件冒号> = 0 保护 , 因此该条件被视为重设条件 。 为了提取该前提条件 , 挖掘任务首先构建如图 2 所示的方法的 CFG(CFG 节点号对应于图 1 中的行号) 。 该任务执行 CFG 的多个遍历 。 对于此分析 , 相关的节点为:i)包含 substring(int , int)API 方法调用的节点 , 以及 ii)条件节点 。 在图 1 所示的客户端方法中 , 只有第 6 和 7 行是相关的(图 2 中所示的相应 CFG 中的节点 6 和 7) 。 所有其他节点都不相关 , 并且在这些节点上执行的任何计算都不会影响挖掘结果 。
在没有我们的技术的情况下 , API 前提条件挖掘任务将遍历所有三个遍历中的 CFG 中的所有节点 , 其中遍历和不相关节点的计算可以避免 , 以节省不必要的计算 。
3 方法图 3 概述了我们的方法 。 我们方法的主要三个组成部分是:i)静态分析以提取规则 , ii)遍历分析以标识与分析相关的节点 , 以及 iii)简化以删除与分析无关的节点 。
图 2 在图 1 所示代码的 CFG 上进行 API 前提条件挖掘分析时 , 它将访问 CFG 中的每个节点 , 并查询这些节点是否具有谓词表达式或 substring(int , int)API 方法调用 。如果是这样 , 则此类节点与 API 前提条件挖掘相关 。
图 3 方法总览
给定一个挖掘任务和一个输入 CFG , 而不是直接在输入 CFG 上运行挖掘任务 , 我们执行轻量级的预分析 , 该分析为挖掘任务标识了相关节点 , 并对不相关的节点进行修剪以获得简化的 CFG 。 静态分析可帮助进行预分析阶段 , 该静态分析提供了一组规则来标识相关节点 。 规则集包含 CFG 节点上的谓词表达式 , 在输入 CFG 的节点上进行评估时 , 这些表达式有助于识别相关节点 。
源代码挖掘任务 。我们为源代码挖掘任务假设以下公式:源代码挖掘任务可能包含一组分析 。 诸如控制流分析 , 数据流分析之类的源代码分析可以表示为对控制流图(CFG)的一次或多次遍历 。 遍历 CFG 中的每个节点并执行一段代码 , 通常称为分析功能 。
图 4 API 前提条件挖掘 Boa 程序
图 4 显示了用 Boa(用于挖掘源代码存储库的领域特定语言)编写的示例 API 前提条件的源代码挖掘任务 。
3.1 提取规则以推断相关节点给定一个包含一个或多个遍历的挖掘任务 , 我们的静态分析通过构造遍历的控制流图表示并枚举其中的所有非循环路径来分析每个遍历 。
定义 1.程序的控制流图(CFG)定义为 G =(N , E , > , ⊥) , 其中 G 是一个有向图 , 其中节点 N 代表程序语句 , 边缘 E 代表语句之间的控制流 。 >和 ⊥ 表示 CFG 的入口和出口节点 。
我们使用符号 GA =(NA , EA , > A , ⊥A)表示分析遍历的 CFG , 并使用 G =(N , E , > , ⊥)表示输入到分析的代码集 CFG 。GA 的(控制流)路径 π 是一个有限序列 , 因此 n1 , n2 , ... , nk∈NA 且对于任何 1≤i A 且 nk =⊥A 。 一组路径{π0 , π1 , ...}是遍历(或分析函数)的控制流图 GA 中的一组非循环路径 。 非循环路径包含只出现一次的节点 , 而循环头节点可能出现两次 。 静态分析的关键思想是根据两个条件选择所有非循环路径的子集:1)路径包含在输入变量(CFG 节点)上提供谓词的语句 , 以及 2)路径包含对输入变量起作用的语句 到分析输出 。
推荐阅读
- 为准早晚称体重不一样,以哪个为准呢?
- 少年|《再见,少年》上影节双喜临门 张子枫张宥浩演绎少年殊途
- 拥有的都珍惜|还向战区难民伸出援手,缅甸首富的基金会就是不一样!除了抗疫
- 12306|像坐地铁一样坐火车 12306推出铁路e卡通
- 体育快进|快进街拍:黑色连衣裙,剩女的倔强,彰显不一样的风格
- 俄罗斯新冠疫苗将免费接种|俄罗斯新冠疫苗将免费接种 10月将大规模接种?
- 彬彬这厢有礼了 ChinaJoy篇二:看到的一些不一样的硬件
- 健康陕西人|2020年陕西省青少年篮球锦标赛在铜川开赛
- 「天使彦」你所渴望的爱情和我一样吗?
- 舞台|《少年之名》三公舞台团魂燃烧,伙伴情义全网泪目
