Concolic Testing
Dynamic Symbolic Execution Marco Probst
Albert-Ludwigs-Universität Freiburg
January 25th, 2016
Marco Probst Concolic Testing 1 / 22
Concolic Testing Dynamic Symbolic Execution Marco Probst - - PowerPoint PPT Presentation
Concolic Testing Dynamic Symbolic Execution Marco Probst Albert-Ludwigs-Universitt Freiburg January 25th, 2016 Marco Probst Concolic Testing 1 / 22 Overview Code Example 1 Unit Testing 2 Random Testing Symbolic Execution Concolic
Marco Probst Concolic Testing 1 / 22
Marco Probst Concolic Testing 2 / 22
Marco Probst Concolic Testing 3 / 22
1 f(int x, int y) { 2
3
4
5
6
7
8
9
10
11 12
13 } Marco Probst Concolic Testing 4 / 22
1 f(int x, int y) { 2
3
4
5
6
7
8
9
10
11 12
13 }
Marco Probst Concolic Testing 4 / 22
Marco Probst Concolic Testing 5 / 22
Marco Probst Concolic Testing 6 / 22
◮ Detect errors ◮ Check corner cases ◮ Provide high code coverage (e.g. path coverage)
Marco Probst Concolic Testing 6 / 22
Marco Probst Concolic Testing 7 / 22
1 f(int x, int y) { 2
3
4
5
6
7
8
9
10
11 12
13 } Marco Probst Concolic Testing 7 / 22
1 f(int x, int y) { 2
3
4
5
6
7
8
9
10
11 12
13 } Marco Probst Concolic Testing 7 / 22
1 f(int x, int y) { 2
3
4
5
6
7
8
9
10
11 12
13 } Marco Probst Concolic Testing 7 / 22
1 f(int x, int y) { 2
3
4
5
6
7
8
9
10
11 12
13 } Marco Probst Concolic Testing 7 / 22
1 f(int x, int y) { 2
3
4
5
6
7
8
9
10
11 12
13 } Marco Probst Concolic Testing 7 / 22
1 f(int x, int y) { 2
3
4
5
6
7
8
9
10
11 12
13 }
Marco Probst Concolic Testing 7 / 22
Marco Probst Concolic Testing 7 / 22
Marco Probst Concolic Testing 7 / 22
Marco Probst Concolic Testing 8 / 22
Marco Probst Concolic Testing 8 / 22
Marco Probst Concolic Testing 9 / 22
Marco Probst Concolic Testing 9 / 22
Marco Probst Concolic Testing 9 / 22
Marco Probst Concolic Testing 9 / 22
Marco Probst Concolic Testing 9 / 22
Marco Probst Concolic Testing 9 / 22
Marco Probst Concolic Testing 9 / 22
Marco Probst Concolic Testing 9 / 22
Marco Probst Concolic Testing 9 / 22
Marco Probst Concolic Testing 9 / 22
Marco Probst Concolic Testing 10 / 22
Marco Probst Concolic Testing 10 / 22
Marco Probst Concolic Testing 10 / 22
1 y = read(); 2 y = 2 * y; 3 4 if (y == 12) { 5
6 } 7 8 complete(); Marco Probst Concolic Testing 10 / 22
1 y = read(); 2 y = 2 * y; 3 4 if (y == 12) { 5
6 } 7 8 complete();
Marco Probst Concolic Testing 10 / 22
1 y = read(); 2 y = 2 * y; 3 4 if (y == 12) { 5
6 } 7 8 complete();
Marco Probst Concolic Testing 10 / 22
1 y = read(); 2 y = 2 * y; 3 4 if (y == 12) { 5
6 } 7 8 complete();
Marco Probst Concolic Testing 10 / 22
1 y = read(); 2 y = 2 * y; 3 4 if (y == 12) { 5
6 } 7 8 complete();
Marco Probst Concolic Testing 10 / 22
1 y = read(); 2 y = 2 * y; 3 4 if (y == 12) { 5
6 } 7 8 complete();
Marco Probst Concolic Testing 10 / 22
1 y = read(); 2 y = 2 * y; 3 4 if (y == 12) { 5
6 } 7 8 complete();
Marco Probst Concolic Testing 10 / 22
1 y = read(); 2 y = 2 * y; 3 4 if (y == 12) { 5
6 } 7 8 complete();
Marco Probst Concolic Testing 10 / 22
1 y = read(); 2 y = 2 * y; 3 4 if (y == 12) { 5
6 } 7 8 complete();
Marco Probst Concolic Testing 10 / 22
1 f(int x, int y) { 2
3
4
5
6
7
8
9
10
11 12
13 } Marco Probst Concolic Testing 11 / 22
1 f(int x, int y) { 2
3
4
5
6
7
8
9
10
11 12
13 }
Marco Probst Concolic Testing 11 / 22
1 f(int x, int y) { 2
3
4
5
6
7
8
9
10
11 12
13 }
Marco Probst Concolic Testing 11 / 22
1 f(int x, int y) { 2
3
4
5
6
7
8
9
10
11 12
13 }
Marco Probst Concolic Testing 11 / 22
1 f(int x, int y) { 2
3
4
5
6
7
8
9
10
11 12
13 }
Marco Probst Concolic Testing 11 / 22
1 f(int x, int y) { 2
3
4
5
6
7
8
9
10
11 12
13 }
Marco Probst Concolic Testing 11 / 22
Marco Probst Concolic Testing 12 / 22
◮ Random Testing ⋆ Concrete values ⋆ Dynamic execution ◮ Symbolic Execution ⋆ Symbols ⋆ Static analysis
Marco Probst Concolic Testing 13 / 22
◮ Random Testing ⋆ Concrete values ⋆ Dynamic execution ◮ Symbolic Execution ⋆ Symbols ⋆ Static analysis
Marco Probst Concolic Testing 13 / 22
◮ Random Testing ⋆ Concrete values ⋆ Dynamic execution ◮ Symbolic Execution ⋆ Symbols ⋆ Static analysis
Marco Probst Concolic Testing 13 / 22
◮ Random Testing ⋆ Concrete values ⋆ Dynamic execution ◮ Symbolic Execution ⋆ Symbols ⋆ Static analysis
Marco Probst Concolic Testing 13 / 22
Marco Probst Concolic Testing 14 / 22
Marco Probst Concolic Testing 14 / 22
Marco Probst Concolic Testing 14 / 22
Marco Probst Concolic Testing 14 / 22
Marco Probst Concolic Testing 14 / 22
Marco Probst Concolic Testing 14 / 22
Marco Probst Concolic Testing 14 / 22
Marco Probst Concolic Testing 14 / 22
Marco Probst Concolic Testing 14 / 22
Marco Probst Concolic Testing 14 / 22
Marco Probst Concolic Testing 15 / 22
Marco Probst Concolic Testing 15 / 22
Marco Probst Concolic Testing 15 / 22
Marco Probst Concolic Testing 15 / 22
Marco Probst Concolic Testing 15 / 22
Marco Probst Concolic Testing 15 / 22
Marco Probst Concolic Testing 15 / 22
Marco Probst Concolic Testing 16 / 22
Marco Probst Concolic Testing 17 / 22
Marco Probst Concolic Testing 17 / 22
Marco Probst Concolic Testing 17 / 22
Marco Probst Concolic Testing 17 / 22
Marco Probst Concolic Testing 17 / 22
Marco Probst Concolic Testing 17 / 22
Marco Probst Concolic Testing 17 / 22
Marco Probst Concolic Testing 17 / 22
Marco Probst Concolic Testing 18 / 22
Marco Probst Concolic Testing 18 / 22
Marco Probst Concolic Testing 18 / 22
Marco Probst Concolic Testing 18 / 22
Marco Probst Concolic Testing 18 / 22
Marco Probst Concolic Testing 18 / 22
Marco Probst Concolic Testing 18 / 22
Marco Probst Concolic Testing 19 / 22
Marco Probst Concolic Testing 20 / 22
Marco Probst Concolic Testing 21 / 22
Marco Probst Concolic Testing 22 / 22