记录黑客技术中优秀的内容,传播黑客文化,分享黑客技术精华

北大程序分析笔记(SSA和稀疏分析)

2020-10-05 12:28

数据流分析的问题

先前有很多数据流分析问题都是关于变量中的值分析,例如:符号分析、常量传播、污点分析等。考虑对以下CFG做数值分析:



  • 在空间复杂度方面,对每个节点都需要保存一份关于x, y, z的值,而一个节点通常只影响了少数变量(如节点2与y,z 无关)

  • 在时间复杂度方面,对当节点一更新y时,更新至于节点3有关,但是数据流必须通过2才能传到3

基于Def-Use的数据流分析

Def-Use关系

给定变量x,如果结点A可能改变x的值,结点B可能使用结点A改变后的x的值,则结点A和结点B存在Def-Use关系

以上面的CFG来说,节点0和节点1,节点1和节点3就存在Def-Use关系。

基于Def-Use的数据流分析首先将其转换为Def-Use边的图,再根据DefUse边做数据流分析:


例如上图,有以下转换函数:

  • y0=f0()

  • y1=f1(y0y1)

  • x2=f2(x2x0)

  • z3=f3(y0y1)

对Def-Use的数据流分析有以下好处:

  • 节点只需保存与自己相关的抽象值

  • 图上的边大大减少,即图变为稀疏图

  • 分析效率提高

相关性质

  • may分析,返回结果是真实结果的超集;

  • soundness和precision,等效于原数据流分析效果。

需要解决的问题

问题1:如何构造Def-Use?

可以用Reaching Definition分析得到,那么分析复杂度为O(nm^2),n为控制流图节点,m为赋值语句个数,速度不够快。

问题2:如果分支语句过多,Def-Use的边反而会增加:


静态单赋值和稀疏分析

静态单赋值

为解决上述问题,引入静态单赋值(SSA),在SSA中,每个变量只被赋值一次,并且引入 ϕ() 函数表示控制流汇聚的情况,例如如下代码(左侧)表示为静态单赋值形式(右侧):

 

SSA有如下几个好处:

  • SSA直接提供了def-use链,如下所示,等号左边变量为入度,等号右边变量为出度:



  • SSA的边不会平方增长(因为有ϕ()):


  • SSA上的流非敏感分析和流敏感分析等价(变量间赋值关系反映了数据流向)

稀疏分析

基于SSA的分析被称为稀疏分析(sparse program analysis)

构造SSA

首先讨论  ϕ 的加入条件,对于一个代码块B,若满足一下条件,需要在B前加ϕ

  1. 到达B的路径≥2;

  2. 其中有一条路径经过了某变量i的赋值语句s;

  3. 有一条路径没有经过s;

  4. s和B之间没有别的代码块满足条件。

支配关系

节点A支配(dominate)节点B,指所有从Entry到B的路径都要经过A,如下两种情况,A都支配B:

结点A严格支配(Strictly dominate)结点B,A支配B并且A和B不是一个结点(如上图中,只有左图A严格支配B)。

结点A的支配边界(Dominance Frontier)中包括B,当且仅当:

  • A支配B的某一个前驱结点,即A在B的某条路径上:

  • 或者,A不严格支配B,即A==B:

对于任意赋值语句 x=... 所在的节点A,在A的所有支配边界插入ϕ

对任意变量i,令 A 为所有对 i 赋值的节点,节点 aA DF(a) 为 a 的支配边界集合,DF+(A) 为所有需要插入  ϕ(i)  的节点:

    • F(A)=U{aA}DF(a)

    • DF+(A)=limiDFi(A

    • F1(A)=DF(A)

    • DFi+1(A)=DF(jiDFj(A))

计算支配边界

计算直接支配者(immediate dominator):a严格支配b,并且不存在c,a严格支配c且c严格支配b, 则a是b的直接支配者,记为idom(b)

直接支配关系实际上是一个树,即支配树,支配树可以反映支配边界:

计算支配树的算法有两种:

  • Lengauer and Tarjan算法

    • 复杂度为 O(Eα(E,N))

    • E为边数,N为结点数,


知识来源: https://mp.weixin.qq.com/s?__biz=Mzg3NzE5OTA5NQ==&mid=2247484007&idx=1&sn=6a507b9a9812841d8fa47fbd7316faba

阅读:265963 | 评论:0 | 标签:无

想收藏或者和大家分享这篇好文章→复制链接地址

“北大程序分析笔记(SSA和稀疏分析)”共有0条留言

发表评论

姓名:

邮箱:

网址:

验证码:

黑帝公告 📢

永久免费持续更新精选优质黑客技术文章Hackdig,帮你成为掌握黑客技术的英雄

↓赞助商 🙇🧎

标签云 ☁