Abstract
Dynamic Symbolic Execution (DSE) is an important method for the testing of programs. An important system on DSE is KLEE which inputs a C/C++ program annotated with symbolic variables, compiles it into LLVM, and then emulates the execution paths of LLVM using a specified backtracking strategy. The major challenge in symbolic execution is path explosion. The method of abstraction learning has been used to address this. The key step here is the computation of an interpolant to represent the learnt abstraction. In this paper, we present a new interpolation algorithm and implement it on top of the KLEE system. The main objective is to address the path explosion problem in pursuit of code penetration: to prove that a target program point is either reachable or unreachable. That is, our focus is verification. We show that despite the overhead of computing interpolants, the pruning of the symbolic execution tree that interpolants provide often brings significant overall benefits. We then pe...
References (31)
- REFERENCES Abductive reasoning. 2020. Abductive reasoning -Wikipedia, The Free Encyclopedia. https://en.wikipedia.org/wiki/ Abductive_reasoning [Online; accessed 10-March-2020].
- All-Targets 2020. Main-Experiment-All-Targets. https://figshare.com/s/2d6852ee9e53291c7c24
- Artifacts 2020. Artifacts for Main and Supplementary experiments. https://figshare.com/s/8ac010976689cab7ebd9
- Thanassis Avgerinos, Alexandre Rebert, Sang Kil Cha, and David Brumley. 2016. Enhancing symbolic execution with veritesting. Commun. ACM 59, 6 (2016), 93-100.
- Cristian Cadar, Daniel Dunbar, and Dawson R Engler. 2008a. KLEE: Unassisted and Automatic Generation of High-Coverage Tests for Complex Systems Programs.. In OSDI. 209-224.
- Cristian Cadar, Vijay Ganesh, Peter M Pawlowski, David L Dill, and Dawson R Engler. 2008b. EXE: automatically generating inputs of death. ACM Transactions on Information and System Security (TISSEC) 12, 2 (2008), 10.
- Cristian Cadar and Koushik Sen. 2013. Symbolic Execution for Software Testing: Three Decades Later. Commun. ACM 56, 2 (2013), 82-90.
- Duc-Hiep Chu and Joxan Jaffar. 2012. A complete method for symmetry reduction in safety verification. In CAV. Springer, 616-633.
- Duc-Hiep Chu, Joxan Jaffar, and Rasool Maghareh. 2016. Precise Cache Timing Analysis via Symbolic Execution. In RTAS 2016.
- Edmund Clarke, Daniel Kroening, and Flavio Lerda. 2004. A tool for checking ANSI-C programs. In TACAS. Springer, 168-176.
- E. M. Clarke, D. Kroenig, N. Sharygina, and K. Yorav. 2005. SATABS: SAT-Based Predicate Abstraction for ANSI-C. In TACAS. 570-574.
- Lucas Cordeiro, Jeremy Morse, Denis Nicole, and Bernd Fischer. 2012. Context-bounded model checking with ESBMC 1.17. In TACAS. Springer, 534-537.
- Coreutils-6.11 2008. Coreutils Benchmarks (version 6.11). https://ftp.gnu.org/gnu/coreutils/ Leonardo De Moura, Harald Rueß, and Maria Sorea. 2002. Lemmas on demand for satisfiability solvers. SAT 2 (2002), 244-251.
- Leonardo Mendonça de Moura and Nikolaj Bjørner. 2008. Proofs and Refutations, and Z3.. In LPAR, Vol. 418. 123-132.
- Stephan Falke, Florian Merz, and Carsten Sinz. 2013. LLBMC: improved bounded model checking of c programs using LLVM. In TACAS. Springer, 623-626.
- Framma-C 2020. A static analyzer. https://frama-c.com/index.html P. Godefroid, N. Klarlund, and K. Sen. 2005. DART: Directed Automated Random Testing. In 26th PLDI. ACM Press, 213-223.
- T. Hansen, P. Schachte, and H. Søndergaard. 2009. State Joining and Splitting for the Symbolic Execution of Binaries. In RV. 76-92.
- M. Heizmann, J. Christ, D. Dietsch, J. Hoenicke, M. Lindenmann, B. Musa, C. Schilling, S. Wissert, and A. Podelski. 2014. Ultimate Automizer with Unsatisfiable Cores. In TACAS. 418-420.
- A. Holzer, C. Schallhart, M. Tautschnig, and H. Veith. 2008. FShell: Systematic Test Case Generation for Dynamic Analysis and Measurement. In CAV. 209-213.
- Joxan Jaffar, Vijayaraghavan Murali, and Jorge A Navas. 2013. Boosting concolic testing via interpolation. In FSE. ACM, 48-58.
- Joxan Jaffar, Vijayaraghavan Murali, Jorge A Navas, and Andrew E Santosa. 2012. TRACER: A symbolic execution tool for verification. In CAV. Springer, 758-766.
- J. Jaffar, J. A. Navas, and A. E. Santosa. 2011. Unbounded Symbolic Execution for Program Verification. In RV. 396-411.
- Joxan Jaffar, Andrew E Santosa, and Răzvan Voicu. 2009. An interpolation method for CLP traversal. In CP. Springer, 454-469.
- Sarfraz Khurshid, Corina S Păsăreanu, and Willem Visser. 2003. Generalized symbolic execution for model checking and testing. In International Conference on Tools and Algorithms for the Construction and Analysis of Systems. Springer, 553-568. LLBMC 2012 2012. LLBMC: Introduction. http://llbmc.org/ LLVM 2018. LLVM Compiler Infrastructure Project. https://llvm.org/. Viewed October 2017.
- Joao P Marques-Silva and Karem A Sakallah. 1999. GRASP: A search algorithm for propositional satisfiability. IEEE T COMPUT 48, 5 (1999), 506-521.
- Kenneth L McMillan. 2010. Lazy Annotation for Program Testing and Verification. In CAV. 104-118.
- Kenneth L McMillan. 2014. Lazy Annotation Revisited. In CAV. 243-259.
- Psyco 2017. SV-COMP Benchmarks: Verification Tasks. https://github.com/sosy-lab/sv-benchmarks/tree/master/c/psyco Psycotool 2017. PSYCO:. https://github.com/psycopaths/psyco RERS 2012. RERS:. http://rers-challenge.org/ RERS 2017. RERS17:. http://rers-challenge.org/2017/ RERS 2019. RERS19:. http://rers-challenge.org/2019/
- K. Sen, D. Marinov, and G. Agha. 2005. CUTE: a concolic unit testing engine for C. In 10th ESEC/13th SIGSOFT FSE. ACM Press, 263-272.
- David Trabish, Andrea Mattavelli, Noam Rinetzky, and Cristian Cadar. 2018. Chopped symbolic execution. In ICSE. ACM, 350-360.
- Q. Yi, Z. Yang, S. Guo, C. Wang, J. Liu, and C. Zhao. 2015. Postconditioned Symbolic Execution. In ICST. 1-10.