南京大学 《软件分析》课程07 过程间分析(Interprocedural Analysis)

引入

目前的所有分析都是过程内分析,不处理方法调用的。

  • 做最保守的假设
  • 不精准之源头

为了更好的精度,使用过程间分析。在方法调用时,会有调用和返回边来传递数据流,避免过度假设造成的精度损失。

调用图CHA

程序中一种调用关系的表示,从调用点链接到目标方法。
应用:

  1. 所有过程间分析的基础
  2. 程序优化
  3. 程序理解
  4. 程序调试
  5. 程序测试
  6. 。。。

OO语言的调用图构造

  • 类层次分析CHA
  • 快速类型分析RTA
  • 变量类型分析VTA
  • Virtual call的方法调度

    程序运行时,一个virtual call被确定是具体调用哪个由以下两点决定:

    1. virtual call返回内容的接收对象是谁:c
    2. CHA

      需要程序的类继承信息

      CHA的方法就是对A自己和所有子类的函数进行查找(感觉这个表述不是很完整)

      算法

      1. 初始化worklist(包含待处理方法)、cg(调用图)、rm(可达方法集)
      2. 当wl不空,就取方法出来,如果rm中没有,就把m加入rm,对m中的调用点去解调用,并把边加入cg,方法m’加入wl

      过程间控·制流图

      CFG表示单个方法结构
      ICFG表示整个程序的结构

      • 有ICFG才能做过程间分析
        ICFG包含方法的CFG以及:
      • 调用边,从调用点到被调用方法的开头
      • 过程间常量传播分析

        调用边转换:传参数
        返回边转换:传返回值

        节点转换:和之前的过程内常量传播一样的,添加了一个杀死left hand side变量的转换,因为过程间没有考虑外部函数,但左边的参数在调用函数后被外部修改了,这个时候变量就不一样了,所以需要删掉。

        需要知道的

        • 如何通过类层次分析构造调用图
        • ICFG的概念
        • 过程间数据流分析
        • 过程间常量传播

        声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年7月15日
下一篇 2021年7月16日

相关推荐