Soot数据流 -- 数据流框架


1.数据流分析框架关键步骤。

个人的问题:

  •  什么叫做数据流分析?
  • 为何将下列问题作为关键步骤?

关键问题及步骤(soot生存手册中提到):

1.1. 决定分析的本质是什么:是否向前后者向后的数据分析?是否考虑分支,还是不进行考虑?等等

1.2. 确定自己想进行如何粗略的估计:是可能的分析还是必不可少的分析?从效果上看,你需要决定,在合并通过一个节点的信息的时候,你是需要进行结合还是切断?

1.3. 执行实际上的流: 本质上是为每一个处于中间状态的 声明 建立方程式。—— 如:任务声明应该如何被操作?

1.4. 确定初始的状态,或者入口节点的近似(如果是回溯的流程,那么是出口节点) 以及 中间节点——(或者是空集,或者是全集,这取决于分析的粒度。)


2.数据流分析理解

2.1.程序中语句与数据分析之间的关系

  • 语句 = 加工厂】每个语句相当于一个小的加工厂,加工厂加工需要一定的原料(输入 in),并且会产生一定的效果(输出 out)。
  • 在soot中的体现out = in - kll +gen这个公式反映了数据流分析的本质,这让数据在语句中真正流动起来(在数据流分析中)。
  • in】in表示接受的输入,因为一条语句前面会有其他的语句,因为当前语句是建立在之前语句的基础之上的,所以需要通过in 来指代之前语句的成果
  • kill,gen】 kill和gen是主要依赖于语句本身的。比如说,a = 100这个语句的作用是将a中之前的值抹去(kill),同时放入 100的值(gen)。
  • out】out反映的是语句处理之后造成的后果

附:

(1) out = in - kill + gen ,在soot中的体现:

    protected void flowThrough(Object in, Object node, Object out) {  
    FlowSet inSet = (FlowSet)source,  
    outSet = (FlowSet)dest;  
    Unit u = (Unit)node;  
    kill(inSet, u, outSet);  
    gen(outSet, u);  
    }  

更具体的代码示例: 过程内数据流分析示例

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值