• 指针分析 Pointer Analysis


    github.com/gosnmp/gosnmp@v1.32.0/gosnmp.go:133


    rxBuf *[rxBufSize]byte // has to be pointer due to https://github.com/golang/go/issues/11728

    指针分析/Point-to Analysis/Reference Analysis - 知乎 https://zhuanlan.zhihu.com/p/79804033

    指针分析的目的

    对于任何一个指针/引用,能否在编译阶段就知道它会指向内存那块位置(位置在这里并不是0xFFFF这样的具体位置,而是说指向哪个stack/heap上local/object)呢? 通过把停机问题reduced to, 能证明指针问题是不可决定的。也就是不能对任何指针都准确的分析出它会确切指向哪。但这不妨碍我们求出近似解,从而在某些情况下能作出优化。 因此我们把问题转化为: 对于任何一个任何指针,能否在编译阶段知道它所有可能(may)指向的位置? 最简单的回答自然是不知道(top), 这种回答没有实际意义,我们要的是更"紧"的答案。

    软件分析笔记4:指针分析 - crossain - 博客园 https://www.cnblogs.com/crossain/p/12767883.html

    2.Introduction to pointer analysis

    指针分析是最基础的静态分析,它最早的研究是从40多年之前开始的,它回答了程序中的指针指向哪个内存的问题,Java语言中的指针分析指的是一个指针指向程序中的哪个对象(Object)的问题.通常指针分析是一个may-analysis,分析的结果通常是一个指针可能指向哪些对象。

    我们用一个实例来解释指针分析的内容:

    如上图所示,对于左边的程序代码,通过分析前两句代码我们可以得到变量a指向new A(),变量x指向new B(),对于a.setB()方法很明显是指向A类中的对应方法,而对于setB()方法,方法中的this会指向new A()因为foo()中是a调用的setB()方法,而方法中的形参b则是由实参x传给他的,指向new B();因此对于setB方法中的“this.b = b;”,是new A.b指向了new B。

    指针分析的输入就是一个程序代码,然后输出一个指向关系。

    注意

    指针分析和别名分析(aliases)有很多相似之处,但是指针分析并不等于别名分析,二者区别如下:

    • 指针分析解答的是一个指针可能指向哪个对象的问题

    • 别名分析解答的是两个指针是否能指向同一个对象的问题,如果是就认为二者互为别名。如下图所示:

      • 别名分析可以通过指针分析推导出来。

    指针分析的应用

    • 可以用来计算其他基本信息(别名分析,调用图...)
    • 编译优化
    • 找Bug
    • 安全性分析
    • 等等......

    指针分析是最基础的静态分析之一,也是很多其他分析的基础。

    Programming Language Design and Program Analysis http://staff.ustc.edu.cn/~yuzhang/pldpa/

    【课程笔记】南大软件分析课程7——指针分析基础(课时9/10) - 简书 https://www.jianshu.com/p/5cbc5bb5c4da

    1.指针分析规则

    首先分析前4种语句:New / Assign / Store / Load。

    指针分析的域和相应的记法:变量/函数/对象/实例域/指针,用pt表示程序中的指向关系(映射)。

     
    7-1-1-标记方法.png

    规则:采用推导形式,横线上面是条件,横线下面是结论。

    • New:创建对象,将new T()对应的对象oi加入到x的指针集。
    • Assign:将y的指针集加入到x对应的指针集。
    • Store:让oi的field指向oj
    • Load:Store的反操作。


       
      7-1-2-规则.png



    链接:https://www.jianshu.com/p/5cbc5bb5c4da
     

     http://staff.ustc.edu.cn/~yuzhang/pldpa/notes/A9PointerAnalysis.pdf

  • 相关阅读:
    CDOJ 92 – Journey 【LCA】
    LCA-Tarjan算法
    【模板】无向图的割顶
    Codeforces 190E
    TwoSAT算法模板
    【转】STL之二分查找 (Binary search in STL)
    【转】数论模板
    【转】计算几何模板
    【转】string常用函数
    Codeforces 245G Suggested Friends
  • 原文地址:https://www.cnblogs.com/rsapaper/p/15127052.html
Copyright © 2020-2023  润新知