zoukankan      html  css  js  c++  java
  • Proj THUDBFuzz Paper Reading: 南京大学软件分析课程2020, 11 Pointer Analysis Context Sensitivity

    Problem of Context-Insensitive Pointer Analysis

    明显Java的方法与上下文,比如调用该函数的变量,有很大关系,比如变量的类型会决定具体调用的是哪个方法实例,之前Context-Insensitive Pointer Analysis比CHA能更好地根据PFG来确定具体调用函数的变量和对应的数据流关系,但是Context-Insensitive Pointer Analysis会把多次调用混杂在一起分析,在实践中带来较大误差。
    比如以下例子:

    由于调用了两次Number id(Number n),两次的上下文都会被记录到图里,在忽视建图顺序的情况下,int i = x.get()就无法确定x指向的变量,也就无法得知到底应该调用哪个方法实例。

    如果我们区分两次调用,分别将其命名为id(n1)和id(n2),那么就能避免将两次调用的关系挤入同一个参数id(n),进一步区分调用的对象从而区分方法实例。

    Intro of Context-Sensitive Pointer Analysis

    目前最流行的是call-site sensitivity,也就是每个调用的代码行对应一份函数抽象形成的节点,包括method本身的抽象,method-this, method-ret, method-args。

    Cloning-Based Context Sensitivity

    每个方法,方法中的变量都会用对应的contexts标记上。比如在call-site sensitivity中fun-3:在第3行被调用的fun方法实例,func-3-x:在第3行被调用的fun方法实例中的变量x。

    Context-sensitive Heap

    Java这种的面向对象语言是非常密集地使用heap的,所以heap上具体的位置也需要使用context sensitivity策略进行区分。不区分的时候方法func-3-x对应的存储位置可能是o8,代表这个变量在第8行被声明并且被放入堆中,但是在区分的情况下,对应的存储位置是3:08,代表context编号为3的情况下,这个变量将在第8行被声明并且被放入堆中。
    下面是一个使用了context-sensitive heap技术后能够区分出结果的实例。

    Rules

    符号定义,注意这里method, variables, objects(实际指向)在空间上都是原空间乘以context空间。相当于是在每个context中都对应拷贝了一份。

    Algos

    Variants

    Call-string sensitivity

    相当于记录整个调用栈作为call-site sensitivity

    k-Limiting Context Abstraction

    限制call-chains的长度为k,一般取k=3

    Object Sensitivity

    使用receiver object的heap context作为callee context,其他时候按照objects不同来区分context。

    Type Sensitivity

    就像名字一样的Object Sensitivity

  • 相关阅读:
    [译]ASP.NET Core 2.0 依赖注入
    FineUIPro v4.0.0 发布了,全新 CSS3 动画惊艳登场!
    [译]ASP.NET Core 2.0 带初始参数的中间件
    [译]ASP.NET Core 2.0 中间件
    【原创】三招搞死你的IE11,可重现代码下载(IE Crash keyframes iframe)!
    立足中国,走向世界(Made in China, Go to World)
    【JS小技巧】JavaScript 函数用作对象的隐藏问题(F.ui.name)
    FineUIMvc v1.4.0 发布了(ASP.NET MVC控件库)!
    公安系统信息化业务概要系统设计
    2018年软件开发状态报告
  • 原文地址:https://www.cnblogs.com/xuesu/p/14332166.html
Copyright © 2011-2022 走看看