TA的每日心情 | 开心 2020-9-8 15:12 |
---|
签到天数: 2 天 [LV.1]初来乍到
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
摘 要: 本文提出了一种基于程序值依赖分析的、路径敏感的空指针解引用检测方法.该方法通过结合数据流 分析中的到达定值分析、区间分析及指向分析创建了值依赖分析图,该图刻画了可能产生空指针语句到其解引用语句 的值依赖关系.该图中的边采用守卫标注,即描述了相邻点之间的到达条件.为了降低误报率,本文同时提出了一种需 求驱动的必然别名算法.由本文所述方法实现的工具展示了良好的实验效果,在 10个 SPEC2000项目中发现了 70余 个空指针解引用缺陷,误报率仅为 6%左右.
, W; a: W5 j; R$ {% k: p3 b1 e. U2 f; e
关键词: 程序分析;静态缺陷检测;空指针解引用检测;需求驱动别名分析
' Q6 F0 y4 ~- `4 u: r# N8 x9 V" J" E6 R
+ e6 \) Y! d, x. }* d
* H' Q3 v4 x& ~2 J空指针解引用已经成为程序最危险的缺陷之一[1]. 空指针解引用缺陷并不容易检测,原因有三:(1)尽管在 大多数情况下,对于解引用会有非空保护存在,但保护 可能与解引用的指针在不同函数中.分析器将会判断从 指针赋值点到解引用点的所有可能路径中是否都包含 保护.(2)空指针保护中的指针变量与解引用的指针并 不是同一指针.那么保护能否生效就取决于这两个指针 是否为必然别名关系.但目前必然别名算法复杂度较 高.(3)空指针解引用的前提条件是在可能为空指针与 其解引用在同一定义使用链中.C语言中有以下两种情 况可能会产生空指针定义点:(a)动态内存分配,如 malloc,calloc函数等.如果系统没有足够的堆内存将返 回空指针.(b)对指针变量赋空.为了确定上述节点与 解引用在执行时是否可达,通用的方法采用定义使用 链,但标准数据流分析并不是跨函数的且不是路径敏感 的,这会导致相当数量的误报.
+ i: Q l- Q6 \4 I9 P
/ [9 \" ?5 d4 g2 E& O, j. V9 i/ w+ M+ u2 r0 V# @
附件下载:
1 z z: E# c( P& s2 e |
|