指针分析
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表示程序中的指向关系(映射)。
规则:采用推导形式,横线上面是条件,横线下面是结论。
- New:创建对象,将
new T()
对应的对象oi加入到x的指针集。 - Assign:将y的指针集加入到x对应的指针集。
- Store:让oi的field指向oj。
-
Load:Store的反操作。
链接:https://www.jianshu.com/p/5cbc5bb5c4da
原文地址:https://www.cnblogs.com/rsapaper/p/15127052.html
- 文档数据库系统CouchDB
- Web 单点登录系统
- IDC+BIM,或将带来数据中心新革命
- CSS 代码的书写规范、顺序
- MSBuild入门(续)
- 续:WordPress 文章图片部署真正的懒加载(Lazy Load)
- Windows 下的安装phpMoAdmin
- 实用代码-JavaScript实用小函数一枚(深入对象取值)
- SQL Server 2008 压缩
- 如何在程序中加入Growl通知
- WordPress 设置与调用 Cookie 的相关代码
- MSBuild入门
- HTTP Basic Authentication验证WCF Data Service
- 移除WordPress 仪表盘首页的“插件”“其它WordPress 新闻”小工具
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法