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)  针对单个函数控制流图中的节点,获取节点中保存的函数参数关系记录,根据函数之间参数的依赖关
   105   106   107   108   109   110   111   112   113   114   115