Precision-Guided Context Sensitivity for Pointer Analysis
Yue Li, Tian Tan, Anders Møller, Yannis Smaragdakis
OOPSLA 2018
1
Precision-Guided Context Sensitivity for Pointer Analysis Yue Li, - - PowerPoint PPT Presentation
Precision-Guided Context Sensitivity for Pointer Analysis Yue Li, Tian Tan, Anders Mller, Yannis Smaragdakis OOPSLA 2018 1 A New Pointer Analysis T echnique for Object-Oriented Programs 2 Pointer Analysis Determines which
1
2
3
Security analysis Bug detection Compiler optimization Program verification Program understanding …
4
Security analysis Bug detection Compiler optimization Program verification Program understanding …
5
6
7
8
static void main() { A a1 = new A(); // A/1 b1 = a1.foo("s1"); A a2 = new A(); // A/2 b2 = a2.foo("s2"); } class A { String foo(String s) { return s; } } Variable Object s "s1", "s2" b1 "s1", "s2" b2 "s1", "s2"
9
static void main() { A a1 = new A(); // A/1 b1 = a1.foo("s1"); A a2 = new A(); // A/2 b2 = a2.foo("s2"); } class A { String foo(String s) { return s; } } Variable Object s "s1", "s2" b1 "s1", "s2" b2 "s1", "s2"
10
static void main() { A a1 = new A(); // A/1 b1 = a1.foo("s1"); A a2 = new A(); // A/2 b2 = a2.foo("s2"); } class A { String foo(String s) { return s; } }
Context Variable Object [A/1] s "s1" [A/2] s "s2" [ ] b1 "s1" [ ] b2 "s2" Variable Object s "s1", "s2" b1 "s1", "s2" b2 "s1", "s2"
11
12
13
14
15
16
17
18
19
20
21
22
23
class Foo { C f; void setF(C p) { this.f = p; } C getF() { C r = this.f; return r; } void bar() { this.f = null; } }
class Foo { C f; void setF(C p) { this.f = p; } C getF() { C r = this.f; return r; } void bar() { this.f = null; } }
24
25
26
27
class C { void M1(Object p) { ... } ... Object M2() { ... return r; } }
28
class C { void M1(Object p) { ... } ... Object M2() { ... return r; } }
void set(Object p) { this.f = p; }
29
class C { void M1(Object p) { ... } ... Object M2() { ... return r; } }
Object get() { Object r = this.f; return r; }
30
31
32
class C { void M1(Object p) { ... } ... void Mi() {
} ... Object M2() { ... return r; } }
33
class C { void M1(Object p) { ... } ... void Mi() {
} ... Object M2() { ... return r; } }
34
35
class C { void M1(Object p) { ... } ... void Mi() {
} ... Object M2() { ... return r; } }
36
37
class C { void M1(Object p) { ... } ... void Mi() { q = o.f; } ... Object M2() { ... return r; } }
38
class C { void M1(Object p) { ... } ... void Mi() { q = o.f; } ... Object M2() { ... return r; } }
39
class C { void M1(Object p) { ... } ... void Mi() { q = o.f; } ... Object M2() { ... return r; } }
40
41
42
43
44
45
46
47
48
PFG
49
OFG
50
51
52
53
54
55
e.g., PLDI'17, OOPSLA'17, PLDI’14, PLDI’13, POPL’11, OOPSLA'09 …
56
100% 38%
ZIPPER Conventional
57
100% 38%
ZIPPER Conventional
100% 98.8%
ZIPPER Conventional
58
100% 38%
ZIPPER Conventional
100% 98.8%
ZIPPER Conventional
59
100% 38%
ZIPPER Conventional
100% 98.8%
ZIPPER Conventional
60
100% 38%
ZIPPER Conventional
100% 98.8%
ZIPPER Conventional ZIPPER Conventional
61
100% 38%
ZIPPER Conventional
100% 98.8%
ZIPPER Conventional ZIPPER Conventional
62
63
64
Time(s) #fail-cast #poly-call #reach-mtd #call-edge
Conventional 3128 1193 1427 8470 53143 Zipper 2704 1224 1449 8486 53289 Zipper* 52 1310 1511 8538 54049