Page 110 - 《软件学报》2020年第11期
P. 110
3426 Journal of Software 软件学报 Vol.31, No.11, November 2020
(a) 源代码片段 (b) 汇编代码片段
(c) 指令级数据依赖图 (d) 函数级数据依赖图
Fig.5 Example of two kinds of data dependence graph
图 5 两种数据依赖图示例
与指令级数据依赖图相比,函数级数据依赖图中的数据流更清晰直观,对变量的回溯效率更高,同时保存了
很多额外信息如变量大小、路径约束等,适用于程序静态脆弱性分析,尤其是针对“污点类”漏洞 [19] 的检测.需要
说明的是,由于函数级数据依赖图忽略了一些变量和指令级的信息,如与函数参数无关的局部变量,在编译优
化、程序切片、指针别名分析等需要完整数据流信息的应用场景中并不适用.
3 函数级数据依赖图构建
为保证数据流分析的准确率,通常需要进行流敏感的分析,即考虑程序语句可能的执行顺序,因而构建
FDDG 需要控制流分析的支持.
控制流分析基于程序的控制流图(control flow graph,简称 CFG),用于确定一个程序的控制结构,可用于探究
程序可能的执行路径、提取循环分析结构等.在构建程序控制流图的过程中,记录函数参数之间的“定义-引用”
关系以及函数名、参数大小等信息,并将这些信息保存在对应的控制流图节点中.
在得到函数调用图和程序控制流图后,构建函数级数据依赖图 FDDG 的方法如下述算法 1 表述,具体流程
如下.
(1) 按后序方式对函数调用图进行遍历.
(2) 针对函数调用图中的每个函数,对其控制流图进行层次遍历.
(3) 针对单个函数控制流图中的节点,获取节点中保存的函数参数关系记录,根据函数之间参数的依赖关