静态切片

一、概述

控制流图CFG、数据流图DFG、程序依赖图PDG、系统依赖图SDG

程序切片从可执行到不可执行

根据输入分类:静态切片,动态切片,有条件切片

程序切片应用之处

二、图论基础

控制流图

基本块:第一句进入,最后一句离开

控制流图以基本块为节点

控制流和数据流

控制流分析就是去发现过程内or过程间的控制流

什么是过程?~函数

控制流图表示形式:

  1. AST
  2. CFG
  3. PDG中的控制依赖

数据流描述了变量的值从定义点如何流到使用点

数据流边表示什么?~变量和变量之间的关系

可到达定义怎么计算?~求解数据流方程

控制依赖和数据依赖

控制依赖:控制流引起的程序实体之间的关系

控制依赖定义:满足以下三个条件:

  1. n1n2之间存在可执行路径
  2. 对可到达路径上的其他点,n2都是它的后必经节点
  3. n2不是n1的后必经节点

条件语句内部的语句控制依赖于条件部分

数据依赖:由于数据定义和使用所形成的实体之间的关系

数据依赖定义:满足以下三个条件:

  1. n2定义了变量v
  2. n1使用了变量v
  3. n2n1存在可执行路径且变量v未重新定义

程序依赖图

这里只是简单介绍

过程内依赖图:即过程依赖图PrDG,即控制依赖图+数据依赖图

过程间依赖图:即系统依赖图,各个过程依赖图+调用边+调用引起的依赖边

三、静态程序分析

MarkWeiser程序切片

切片准则:,n表示某个语句,V表示代码中变量的子集

其实就是在简化代码,希望留下切片准则相关的代码,求切片就是求图的可达性问题

切片结果可能不符合语法

切片优化:寻找最小切片问题是不可解的

不足:只能解决简单的程序,为了解决过程和过程调用的问题提出了过程内切片和过程间切片

过程内切片

先在cfg上构建控制依赖图和数据依赖图,然后把两个图合并即可得到pdg

先构建程序依赖图pdg,再应用图可达性算法

前向后向区别:

  • 后向:是指以漏洞关注点为终点,能够到达该节点的所有路径上的所有节点
  • 前向:是指从关注点节点出发,能够达到达到的所有路径上的节点

过程间切片

一样的逻辑,构建系统依赖图,然后应用图可达性算法

在过程依赖图上添加调用边、参数输入边和参数输出边形成系统依赖图(根据P50,好像有更多操作)

参考资料

《程序切片技术及其应用》

【南大软件分析】lecture7 笔记-Interprocedural Analysis