南大软件分析第十一节——Pointer Analysis - Context Sensitivity I

视频:南京大学《软件分析》课程10(Pointer Analysis - Foundations II)哔哩哔哩_bilibili
课程主页:Static Program Analysis | Tai-e (pascal-lab.net)
笔记参考:【课程笔记】南大软件分析课程8——指针分析-上下文敏感(课时11/12) - 简书 (jianshu.com)
(34条消息) 【课程笔记】南大软件分析课程—16课时完整版_bsauce的博客-CSDN博客_南京大学软件分析
PPT:Pointer Analysis: Context Sensitivity (nju.edu.cn)

上下文不敏感带来的问题

image.png
对于上述这段代码,当我们不考虑上下文去处理第 5、6 行的 id 函数调用的时候,id 的参数和返回值会和两次调用的参数和返回值杂糅在一起,这样假如在进行常量传播的时候,变量 i 就会被分析为 NAC,这是不对的。所以要对函数调用添加上下文,这样去分析第 7 行的时候 get 指向的就只有对象 One 里面的 get 函数

Introduction

btw
上下文不敏感的英文是 contex insensitivity,缩写是 C.I.
上下文敏感的英文是 contex sensitivity,缩写是 C.S.

  • 目前 oldest 和 best-know 的上下文敏感策略是 call-site sensitivity(call-string)
    • 使用 call site 链来表示每个方法的上下文(非重点)
  • cloning-based 上下文敏感(最直观的方法去实现上下文敏感)、
    • 每个上下文就会对变量和方法进行一次克隆
  • 上下文敏感的堆
    • OO 程序是典型的堆敏感,因为程序会频繁的修改堆,所以也要对堆抽象添加上下文

    • 老师在这里进行举例表示上下文敏感和堆的上下文敏感缺一不可

    • 不考虑堆的上下文敏感,只考虑分析的上下文敏感

      • image.png
      • 我们可以看到虽然分析的时候考虑了上下文敏感,但是当调用方法中存在 new 语句的时候 (堆操作),不考虑堆的 C.S.就会像左图一样
    • 考虑堆的上下文敏感,不考虑分析的上下文敏感

      • image.png
      • 当分析的时候不考虑上下文敏感,只考虑对的上下文敏感,如左图所示,在变量 p 处就出现了错误,随后导致 o_8. f 指向 o 1 和 o 2,即使堆上下文敏感也没用。

Context Sensitive Pointer Analysis:Rules

就是在之前的规则上面增加了标记

  • 根据调用者的行数来区分不同上下文,只要区分了函数、变量、堆对象,就能够区分实例域、上下文敏感的指针(变量+对象域)。

C:上下文(暂时用调用点的行数表示),O:对象,F:对象中的域。
image.png

image.png
Call 规则有所改变
image.png

  • select (c, l, c’: oi, m)根据调用时的信息来给调用目标函数选择上下文(c 是调用者的上下文,l 是调用者的行号,c’: oi 是 x 对象的指向集合,m 是目标函数),ct 表示目标函数的上下文(后面会将如何 Select 如何选择上下文)。c 是可以累积的,一连串的调用,上下文将用一连串的行数来表示。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值