空指针异常
- 调用空对象的方法
- 访问或修改空对象的成员变量
- 访问空数组的长度
- 访问空数组或修改的内容
- 将空对象进行抛出
空指针检测技术现状
- 预防技术
- 条件预防
- 使用注解
- 避免value.toString()
- 使用断言
- 使用Optional
- 静态检测
- null常量赋值
- null显示对比
- 域的追踪
- 路径推断(符号执行)
- 全局字典标注
基于验证的空指针分析
- Jimple代码转换
- 获取控制流图
- 获取指针引用
- 遍历待分析程序
- 为每个引用建立引用分析流
- 获取当前引用的所有前驱节点
- 为当前引用添加假设
- 对前驱节点完成数据流传递分析(关键)
- 出口逻辑约简
- 重复步骤6-9
- 如果到函数头结果仍不明确,则获取当前函数的调用语句,重复6-9
- 收集所有的引用分析结果,并定位
空指针检测代码展示
本次组会内容下载链接