Soot II: 数据流框架

设计数据流分析包含4步

1. 决定分析的本质。是向前还是向后?是否需要对分支特殊考虑?

2. 决定近似的目标。是may还是must? 具体来说是在merge时找交集还是并集。

3. 展现具体的flow。即对IR中的每条statement列等式(transfer function)

4. 决定初始状态或者入口(如果是向后分析则是出口)和中间节点的近似。即空集或者满集,依赖于分析的conservative。

做数据流分析我们需要某种结构来表现数据流是如何穿程序的肠而过的,如控制流图。Soot的数据流框架能处理各种形式的cfg,通过实现接口soot.toolkits.graph.DirectedGrap。


下面用very-busy expr analysis作为例子。

1 分析本质

Soot提供三种分析的实现: ForwardFlowAnalysis, BackwardFlowAnalysis 以及ForwardBranchedFlowAnalysis。前两者除了flow流向外基本相同,结果为两张映射: 从节点到IN 集合和从节点到OUT集合。最后一个提供了通过不同branch node传递不同信息(比如信息流从带有if (x > 0)的节点流出时可以是x>0或者x<=0),因此包含3种maps: 从结点到IN集合, 从节点到OUT集合以及从节点到branch OUT集合。所有以上通过worklist算法来解fix-point的机制来实现。如果想用别的算法来实现可以继承以下三个superclass中的一个: AbstractFlowAnalysis, FlowAnalysis, 或者BranchedFlowAnalysis。

对于very-busy expr analysis, 需要向后分析,因此class定义为

class Very Busy Expression Analys
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值