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