Academia.eduAcademia.edu

Outline

A Survey of Symbolic Execution Techniques

2019, ACM Computing Surveys

https://doi.org/10.1145/3182657

Abstract

Many security and software testing applications require checking whether certain properties of a program hold for any possible usage scenario. For instance, a tool for identifying software vulnerabilities may need to rule out the existence of any backdoor to bypass a program’s authentication. One approach would be to test the program using different, possibly random inputs. As the backdoor may only be hit for very specific program workloads, automated exploration of the space of possible inputs is of the essence. Symbolic execution provides an elegant solution to the problem, by systematically exploring many possible execution paths at the same time without necessarily requiring concrete inputs. Rather than taking on fully specified input values, the technique abstractly represents them as symbols, resorting to constraint solvers to construct actual instances that would cause property violations. Symbolic execution has been incubated in dozens of tools developed over the past four d...

References (119)

  1. Erika Abraham. 2015. Building Bridges Between Symbolic Computation and Satisfiability Checking. In Proc. 2015 ACM on Int. Symp. on Symbolic and Algebraic Computation (ISSAC'15). ACM, 1-6.
  2. Erika Abraham, John Abbott, Bernd Becker, Anna M. Bigatti, Martin Brain, Bruno Buchberger, Alessandro Cimatti, James H. Davenport, Matthew England, Pascal Fontaine, Stephen Forrest, Alberto Griggio, Daniel Kroening, Werner M. Seiler, and Thomas Sturm. 2016. SC2: Satisfiability Checking Meets Sym- bolic Computation. In Proc. 9th Int. Conf. on Intelligent Computer Math. (CICM'16). Springer, 28-43.
  3. Saswat Anand. 2012. Techniques to Facilitate Symbolic Execution of Real-world Programs. Ph.D. Disserta- tion. Atlanta, GA, USA. AAI3531671.
  4. Saswat Anand, Patrice Godefroid, and Nikolai Tillmann. 2008. Demand-driven Compositional Symbolic Ex- ecution. In Proc. Theory and Practice of Software, 14th Int. Conf. on Tools and Algorithms for the Con- struction and Analysis of Systems (TACAS'08/ETAPS'08). 367-381.
  5. Saswat Anand, Alessandro Orso, and Mary Jean Harrold. 2007. Type-dependence Analysis and Program Transformation for Symbolic Execution. In Proc. 13th Int. Conf. on Tools and Algorithms for the Con- struction and Analysis of Systems (TACAS'07). 117-133.
  6. Saswat Anand, Corina S. Pasareanu, and Willem Visser. 2009. Symbolic Execution with Abstraction. Int. J. Software Tools Technol. Transf. 11, 1 (2009), 53-67.
  7. Thanassis Avgerinos. 2014. Exploiting Trade-offs in Symbolic Execution for Identifying Security Bugs. Ph.D. Dissertation. http://repository.cmu.edu/cgi/viewcontent.cgi?article=1478&context=dissertations.
  8. Thanassis Avgerinos, Sang Kil Cha, Brent Lim Tze Hao, and David Brumley. 2011. AEG: Automatic Exploit Generation. In Proc. Network and Distributed System Security Symp. (NDSS'11).
  9. Thanassis Avgerinos, Alexandre Rebert, Sang Kil Cha, and David Brumley. 2014. Enhancing Symbolic Ex- ecution with Veritesting. In Proc. 36th Int. Conf. on Software Engineering (ICSE'14). ACM, 1083-1094.
  10. Domagoj Babic and Alan J. Hu. 2008. Calysto: Scalable and Precise Extended Static Checking. In Proc. 30th Int. Conf. on Software Engineering (ICSE'08). ACM, 211-220.
  11. David F. Bacon, Susan L. Graham, and Oliver J. Sharp. 1994. Compiler Transformations for High- performance Computing. ACM Computing Surveys (CSUR) 26, 4 (1994), 345-420.
  12. Thomas Ball, Ella Bounimova, Byron Cook, Vladimir Levin, Jakob Lichtenberg, Con McGarvey, Bohus On- drusek, Sriram K. Rajamani, and Abdullah Ustuner. 2006. Thorough Static Analysis of Device Drivers. In Proc. 1st ACM SIGOPS/EuroSys European Conf. on Comp. Systems (EuroSys'06). ACM, 73-85.
  13. Clark Barrett, Daniel Kroening, and Thomas Melham. 2014. Problem solving for the 21st century: Efficient solver for satisfiability modulo theories. London Mathematical Society and Smith Institute for Industrial Mathematics and System Engineering.
  14. Fabrice Bellard. 2005. QEMU, a Fast and Portable Dynamic Translator. In Proc. USENIX Annual Technical Conf. (ATEC'05). USENIX Association, 41-41.
  15. Peter Boonstoppel, Cristian Cadar, and Dawson R. Engler. 2008. RWset: Attacking Path Explosion in Constraint-Based Test Generation. In Proc. 14th Int. Conf. on Tools and Algorithms for the Construction and Analysis of Systems (TACAS'08). 351-366.
  16. Matko Botinčan, Matthew Parkinson, and Wolfram Schulte. 2009. Separation Logic Verification of C Pro- grams with an SMT Solver. Electronic Notes in Theoretical Comp. Science 254 (2009), 5-23.
  17. Robert S. Boyer, Bernard Elspas, and Karl N. Levitt. 1975. SELECT -A Formal System for Testing and Debugging Programs by Symbolic Execution. In Proc. of Int. Conf. on Reliable Software. ACM, 234-245.
  18. David Brumley, Ivan Jager, Thanassis Avgerinos, and Edward J. Schwartz. 2011. BAP: A Binary Analysis Platform. In Proc. 23rd Int. Conf. on Computer Aided Verification (CAV'11). 463-469.
  19. Stefan Bucur, Vlad Ureche, Cristian Zamfir, and George Candea. 2011. Parallel Symbolic Execution for Automated Real-world Software Testing. In Proc. 6th Conf. on Comp. Systems (EuroSys'11). 183-198.
  20. Cristian Cadar. 2015. Targeted Program Transformations for Symbolic Execution. In Proc. 2015 10th Joint Meeting on Foundations of Software Engineering (ESEC/FSE'15). ACM, 906-909.
  21. Cristian Cadar, Daniel Dunbar, and Dawson R. Engler. 2008. KLEE: Unassisted and Automatic Genera- tion of High-coverage Tests for Complex Systems Programs. In Proc. 8th USENIX Conf. on Operating Systems Design and Implementation (OSDI'08). USENIX Association, 209-224.
  22. Cristian Cadar, Vijay Ganesh, Peter M. Pawlowski, David L. Dill, and Dawson R. Engler. 2006. EXE: Au- tomatically Generating Inputs of Death. In Proc. 13th ACM Conf. on Computer and Communications Security (CCS'06). ACM, 322-335.
  23. Cristian Cadar and Koushik Sen. 2013. Symbolic Execution for Software Testing: Three Decades Later. Commun. ACM 56, 2 (2013), 82-90.
  24. Cristiano Calcagno, Dino Distefano, Peter W. O'Hearn, and Hongseok Yang. 2011. Compositional Shape Analysis by Means of Bi-Abduction. J. ACM 58, 6, Article 26 (2011).
  25. Matteo Ceccarello and Oksana Tkachuk. 2014. Automated Generation of Model Classes for Java PathFinder. SIGSOFT Software Engineering Notes 39, 1 (2014), 1-5.
  26. Sang Kil Cha, Thanassis Avgerinos, Alexandre Rebert, and David Brumley. 2012. Unleashing Mayhem on Binary Code. In Proc. 2012 IEEE Symp. on Sec. and Privacy (SP'12). IEEE Comp. Society, 380-394.
  27. Satish Chandra, Stephen J. Fink, and Manu Sridharan. 2009. Snugglebug: A Powerful Approach to Weakest Preconditions. In Proc. 30th ACM SIGPLAN Conf. on Programming Language Design and Implementa- tion (PLDI'09). ACM, 363-374.
  28. Ting Chen, Xiaodong Lin, Jin Huang, Abel Bacchus, and Xiaosong Zhang. 2015. An Empirical Investigation into Path Divergences for Concolic Execution Using CREST. Security and Communication Networks 8, 18 (2015), 3667-3681.
  29. Ting Chen, Xiao-Song Zhang, Shi-Ze Guo, Hong-Yuan Li, and Yue Wu. 2013. State of the Art: Dynamic Symbolic Execution for Automated Test Generation. Future Gen. Comput. Syst. 29, 7 (2013), 1758-1773.
  30. Vitaly Chipounov, Volodymyr Kuznetsov, and George Candea. 2012. The S2E Platform: Design, Implemen- tation, and Applications. ACM Transactions on Computer Systems (TOCS) 30, 1 (2012), 2:1-2:49.
  31. Peter Collingbourne, Cristian Cadar, and Paul H.J. Kelly. 2011. Symbolic Crosschecking of Floating-point and SIMD Code. In Proc. Sixth Conf. on Computer Systems (EuroSys'11). ACM, 315-328.
  32. Byron Cook, Andreas Podelski, and Andrey Rybalchenko. 2006. Termination Proofs for Systems Code. In Proc. 27th ACM SIGPLAN Conf. on Programming Language Design and Implementation. 415-426.
  33. Emilio Coppa, Daniele Cono D'Elia, and Camil Demetrescu. 2017. Rethinking Pointer Reasoning in Symbolic Execution. In Proc. 32nd IEEE/ACM Int. Conf. on Automated Software Engineering (ASE'17). 613-618.
  34. Florian Corzilius, Gereon Kremer, Sebastian Junges, Stefan Schupp, and Erika Abraham. 2015. SMT-RAT: An Open Source C++ Toolbox for Strategic and Parallel SMT Solving. In Proc. 18th Int. Conf. on Theory and Applications of Satisfiability Testing (SAT'15), Marijn Heule and Sean Weaver (Eds.). 360-368.
  35. William Craig. 1957. Three Uses of the Herbrand-Gentzen Theorem in Relating Model Theory and Proof Theory. J. Symbolic Logic 22, 3 (1957), 269-285.
  36. Christoph Csallner and Yannis Smaragdakis. 2005. Check 'N' Crash: Combining Static Checking and Test- ing. In Proc. 27th Int. Conf. on Software Engineering (ICSE'05). ACM, 422-431.
  37. Leonardo De Moura and Nikolaj Bjørner. 2008. Z3: An Efficient SMT Solver. In Proc. Theory and Prac- tice of Software, 14th Int. Conf. on Tools and Algorithms for the Construction and Analysis of Systems (TACAS'08/ETAPS'08). 337-340.
  38. Leonardo De Moura and Nikolaj Bjørner. 2011. Satisfiability Modulo Theories: Introduction and Applica- tions. Commun. ACM 54, 9 (2011), 69-77.
  39. Xianghua Deng, Jooyong Lee, and Robby. 2012. Efficient and Formal Generalized Symbolic Execution. Au- tomated Software Engineering 19, 3 (2012), 233-301.
  40. Peter Dinges and Gul Agha. 2014a. Solving Complex Path Conditions Through Heuristic Search on Induced Polytopes. In Proc. 22nd ACM SIGSOFT Int. Symp. on Foundations of Software Engineering. 425-436.
  41. Peter Dinges and Gul Agha. 2014b. Targeted Test Input Generation Using Symbolic-concrete Backward Execution. In Proc. 29th ACM/IEEE Int. Conf. on Automated Software Engineering (ASE'14). 31-36.
  42. Shiyu Dong, Oswaldo Olivo, Lingming Zhang, and Sarfraz Khurshid. 2015. Studying the Influence of Stan- dard Compiler Optimizations on Symbolic Execution. In Proc. 2015 IEEE 26th Int. Symp. on Software Reliability Engineering. 205-215.
  43. Evelyn Duesterwald (Ed.). 2004. Analyzing Memory Accesses in x86 Executables. Springer. Bassem Elkarablieh, Patrice Godefroid, and Michael Y. Levin. 2009. Precise Pointer Reasoning for Dynamic Test Generation. In Proc. 18th Int. Symp. on Software Testing and Analysis (ISSTA'09). ACM, 129-140.
  44. Dawson R. Engler and Ken Ashcraft. 2003. RacerX: Effective, Static Detection of Race Conditions and Dead- locks. In Proc,. 19th ACM Symp. on Operating Systems Principles (SOSP'03). ACM, 237-252. 0:35
  45. Dawson R. Engler and Daniel Dunbar. 2007. Under-constrained Execution: Making Automatic Code De- struction Easy and Scalable. In Proc. of 2007 Int. Symp. on Soft. Test. and Analysis (ISSTA'07). 1-4.
  46. Cormac Flanagan and Shaz Qadeer. 2002. Predicate Abstraction for Software Verification. In Proc. of 29th ACM SIGPLAN-SIGACT Symp. on Principles of Programming Languages (POPL'02). ACM, 191-202.
  47. Carlo A. Furia, Bertrand Meyer, and Sergey Velder. 2014. Loop Invariants: Analysis, Classification, and Examples. ACM Computing Surveys (CSUR) 46, 3, Article 34 (2014).
  48. Juan P. Galeotti, Carlo A. Furia, Eva May, Gordon Fraser, and Andreas Zeller. 2015. Inferring Loop Invari- ants by Mutation, Dynamic Analysis, and Static Checking. IEEE Transactions on Software Engineering (TSE) 41, 10 (2015), 1019-1037.
  49. Vijay Ganesh and David L. Dill. 2007. A Decision Procedure for Bit-vectors and Arrays. In Proc. 19th Int. Conf. on Computer Aided Verification (CAV'07). 519-531.
  50. Patrice Godefroid. 2007. Compositional Dynamic Test Generation. In Proc. 34th SIGPLAN-SIGACT Symp. on Principles of Programming Languages (POPL'07). 47-54.
  51. Patrice Godefroid, Nils Klarlund, and Koushik Sen. 2005. DART: Directed Automated Random Testing. In Proc. ACM SIGPLAN Conf. on Programming Language Design and Implementation (PLDI'05). 213-223.
  52. Patrice Godefroid, Michael Y. Levin, and David A. Molnar. 2008. Automated Whitebox Fuzz Testing. In Proc. Network and Distributed System Security Symp. (NDSS'08).
  53. Patrice Godefroid, Michael Y. Levin, and David A. Molnar. 2012. SAGE: Whitebox Fuzzing for Security Testing. Queue 10, 1, Article 20 (2012), 20:20-20:27 pages.
  54. Patrice Godefroid and Daniel Luchaup. 2011. Automatic Partial Loop Summarization in Dynamic Test Gen- eration. In Proc. 2011 Int. Symp. on Software Testing and Analysis (ISSTA'11). ACM, 23-33.
  55. Laure Gonnord, David Monniaux, and Gabriel Radanne. 2015. Synthesis of Ranking Functions Using Ex- tremal Counterexamples. In Proc. 36th ACM SIGPLAN Conf. on Programming Language Design and Implementation (PLDI'15). ACM, 608-618.
  56. Johannes Grabmeier, Erich Kaltofen, and Volker Weispfenning. 2003. Computer Algebra Handbook: Foun- dations, Applications, Systems. Vol. 1. Springer Science & Business Media, 109-124.
  57. Trevor Hansen, Peter Schachte, and Harald Søndergaard. 2009. Runtime Verification. Chapter State Joining and Splitting for the Symbolic Execution of Binaries, 76-92.
  58. William E. Howden. 1977. Symbolic Testing and the DISSECT Symbolic Evaluation System. IEEE Trans- actions on Software Engineering (TSE) 3, 4 (1977), 266-278.
  59. Joxan Jaffar, Vijayaraghavan Murali, and Jorge A. Navas. 2013. Boosting Concolic Testing via Interpolation. In Proc. 2013 9th Joint Meeting on Foundations of Software Engineering (ESEC/FSE'13). ACM, 48-58.
  60. Joxan Jaffar, Vijayaraghavan Murali, Jorge A. Navas, and Andrew E. Santosa. 2012a. TRACER: A Symbolic Execution Tool for Verification. In Proc. 24th Int. Conf. on Comp. Aided Verification (CAV'12). 758-766.
  61. Joxan Jaffar, Jorge A. Navas, and Andrew E. Santosa. 2012b. Unbounded Symbolic Execution for Program Verification. In Proc. 2nd Int. Conf. on Runtime Verification (RV'11). 396-411.
  62. Joxan Jaffar, Andrew E. Santosa, and R ǎzvan Voicu. 2009. An Interpolation Method for CLP Traversal. In Proc. 15th Int. Conf. on Principles and Practice of Constraint Programming (CP'09). 454-469.
  63. Jinseong Jeon, Xiaokang Qiu, Jonathan Fetter-Degges, Jeffrey S. Foster, and Armando Solar-Lezama. 2016. Synthesizing Framework Models for Symbolic Execution. In Proc. 38th Int. Conf. on Software Engineer- ing (ICSE'16). ACM, 156-167.
  64. Xiangyang Jia, Carlo Ghezzi, and Shi Ying. 2015. Enhancing Reuse of Constraint Solutions to Improve Symbolic Execution. In Proc. 2015 Int. Symp. on Software Testing and Analysis (ISSTA'15). 177-187.
  65. Yit Phang Khoo, Bor-Yuh Evan Chang, and Jeffrey S. Foster. 2010. Mixing Type Checking and Symbolic Execution. In Proc. 31st ACM SIGPLAN Conf. on Prog. Lang. Design and Impl. (PLDI'10). 436-447.
  66. Sarfraz Khurshid, Corina S. Pasareanu, and Willem Visser. 2003. Generalized Symbolic Execution for Model Checking and Testing. In Proc. 9th Int. Conf. on Tools and Algorithms for the Construction and Analysis of Systems (TACAS'03). Springer-Verlag, 553-568.
  67. James C. King. 1975. A New Approach to Program Testing. In Proc. Int. Conf. on Reliable Software. ACM, 228-233.
  68. James C. King. 1976. Symbolic Execution and Program Testing. Commun. ACM 19, 7 (1976), 385-394.
  69. Daniel Kroening, Natasha Sharygina, Stefano Tonetta, Aliaksei Tsitovich, and Christoph M. Wintersteiger. 2008. Loop Summarization Using Abstract Transformers. In Proc. 6th Int. Symp. on Automated Tech- nology for Verification and Analysis (ATVA'08). 111-125.
  70. Volodymyr Kuznetsov, Johannes Kinder, Stefan Bucur, and George Candea. 2012. Efficient State Merging in Symbolic Execution. In Proc. 33rd ACM SIGPLAN Conf. on Programming Language Design and Implementation (PLDI'12). ACM, 193-204.
  71. You Li, Zhendong Su, Linzhang Wang, and Xuandong Li. 2013. Steering Symbolic Execution to Less Trav- eled Paths. In Proc. ACM SIGPLAN Conference on Object Oriented Programming Systems Languages & Applications (OOPSLA'13). 19-32.
  72. Kin-Keung Ma, Khoo Yit Phang, Jeffrey S. Foster, and Michael Hicks. 2011. Directed Symbolic Execution. In Proc. 18th Int. Conf. on Static Analysis (SAS'11). 95-111.
  73. Rupak Majumdar and Koushik Sen. 2007. Hybrid Concolic Testing. In Proc. 29th Int. Conf. on Software Engineering (ICSE'07). IEEE Computer Society, 416-426.
  74. Rupak Majumdar and Ru-Gang Xu. 2009. Reducing Test Inputs Using Information Partitions. In Proc. 21st Int. Conf. on Computer Aided Verification (CAV'09). Springer-Verlag, Berlin, Heidelberg, 555-569.
  75. Kenneth L. McMillan. 2010. Lazy Annotation for Program Testing and Verification. In Proc. 22nd Int. Conf. on Computer Aided Verification (CAV'10). 104-118.
  76. Phil McMinn. 2004. Search-based Software Test Data Generation: A Survey. Software Testing, Verification & Reliability 14, 2 (2004), 105-156.
  77. Corina S. Pasareanu and Neha Rungta. 2010. Symbolic PathFinder: Symbolic Execution of Java Bytecode. In Proc. IEEE/ACM Int. Conf. on Automated Software Engineering (ASE'10). ACM, 179-180.
  78. Corina S. Pasareanu, Neha Rungta, and Willem Visser. 2011. Symbolic Execution with Mixed Concrete- symbolic Solving. In Proc. 2011 Int. Symp. on Software Testing and Analysis (ISSTA'11). ACM, 34-44.
  79. Corina S. Pasareanu and Willem Visser. 2009. A Survey of New Trends in Symbolic Execution for Software Testing and Analysis. Int. Journal on Software Tools for Technology Transfer 11, 4 (2009), 339-353.
  80. David M. Perry, Andrea Mattavelli, Xiangyu Zhang, and Cristian Cadar. 2017. Accelerating Array Con- straints in Symbolic Execution. In Proc. 26th ACM SIGSOFT Int. Symp. on Software Testing and Anal- ysis (ISSTA'17). ACM, 68-78.
  81. Ruzica Piskac, Thomas Wies, and Damien Zufferey. 2013. Automating Separation Logic Using SMT. In Proc. 25th Int. Conf. on Computer Aided Verification (CAV'13). 773-789.
  82. Amir Pnueli and Roni Rosner. 1989. On the Synthesis of a Reactive Module. In Proc. 16th ACM SIGPLAN- SIGACT Symp. on Principles of Programming Languages (POPL'89). ACM, 179-190.
  83. Charles Prud'homme, Jean-Guillaume Fages, and Xavier Lorca. 2015. Choco Documentation. TASC, INRIA Rennes, LINA CNRS UMR 6241, COSLING S.A.S.
  84. Dawei Qi, Hoang D. T. Nguyen, and Abhik Roychoudhury. 2013. Path Exploration Based on Symbolic Out- put. ACM Transactions on Software Engineering and Methodology (TOSEM) 22, 4, Article 32 (2013).
  85. David A. Ramos and Dawson R. Engler. 2015. Under-constrained Symbolic Execution: Correctness Checking for Real Code. In Proc. 24th USENIX Conf. on Security Symp. (SEC'15). USENIX Association, 49-64.
  86. John C. Reynolds. 2002. Separation Logic: A Logic for Shared Mutable Data Structures. In Proc. 17th Annual IEEE Symp. on Logic in Computer Science (LICS'02). IEEE Computer Society, 55-74.
  87. Nicolas Rosner, Jaco Geldenhuys, Nazareno M. Aguirre, Willem Visser, and Marcelo F. Frias. 2015. BLISS: Improved Symbolic Execution by Bounded Lazy Initialization with SAT Support. IEEE Transactions on Software Engineering (TSE) 41, 7 (2015), 639-660.
  88. Prateek Saxena, Pongsin Poosankam, Stephen McCamant, and Dawn Song. 2009. Loop-extended Symbolic Execution on Binary Programs. In Proc. 18th Int. Symp. on Software Testing and Analysis. 225-236.
  89. Edward J. Schwartz, Thanassis Avgerinos, and David Brumley. 2010. All You Ever Wanted to Know About Dynamic Taint Analysis and Forward Symbolic Execution (but Might Have Been Afraid to Ask). In Proc. 2010 IEEE Symp. on Security and Privacy (SP'10). IEEE Computer Society, 317-331.
  90. Daniel Schwartz-Narbonne, Martin Schaf, Dejan Jovanovic, Philipp R ümmer, and Thomas Wies. 2015. Conflict-Directed Graph Coverage. In NASA Formal Methods: 7th Int. Symp. 327-342.
  91. Koushik Sen, Darko Marinov, and Gul Agha. 2005. CUTE: A Concolic Unit Testing Engine for C. In Proc. 10th European Software Engineering Conf. Held Jointly with 13th ACM SIGSOFT Int. Symp. on Foun- dations of Software Engineering (ESEC/FSE'13). ACM, 263-272.
  92. Ondrej Sery, Grigory Fedyukovich, and Natasha Sharygina. 2012a. Incremental Upgrade Checking by Means of Interpolation-based Function Summaries. In 2012 Formal Methods in Computer-Aided De- sign (FMCAD'12). 114-121.
  93. Ondrej Sery, Grigory Fedyukovich, and Natasha Sharygina. 2012b. Interpolation-Based Function Sum- maries in Bounded Model Checking. In Proc. 7th Int. Haifa Verification Conf. on Hardware and Soft- ware: Verification and Testing (HVC'11). 160-175.
  94. Yan Shoshitaishvili, Ruoyu Wang, Christophe Hauser, Christopher Kruegel, and Giovanni Vigna. 2015. Firmalice -Automatic Detection of Authentication Bypass Vulnerabilities in Binary Firmware. In 22nd Annual Network and Distributed System Security Symp. (NDSS'15).
  95. Yan Shoshitaishvili, Ruoyu Wang, Christopher Salls, Nick Stephens, Mario Polino, Andrew Dutcher, John Grosen, Siji Feng, Christophe Hauser, Christopher Kruegel, and Giovanni Vigna. 2016. SOK: (State of) The Art of War: Offensive Techniques in Binary Analysis. In IEEE Symp. on Security and Privacy (SP'16). 138-157.
  96. Jiri Slaby, Jan Strejcek, and Marek Trtik. 2013. Compact Symbolic Execution. In 11th Int. Symp. on Auto- mated Technology for Verification and Analysis (ATVA'13). 193-207.
  97. Armando Solar Lezama. 2008. Program Synthesis By Sketching. Ph.D. Dissertation. EECS Department, University of California, Berkeley.
  98. Dawn Song, David Brumley, Heng Yin, Juan Caballero, Ivan Jager, Min Gyung Kang, Zhenkai Liang, James Newsome, Pongsin Poosankam, and Prateek Saxena. 2008. BitBlaze: A New Approach to Computer Security via Binary Analysis. In Proc. 4th Int. Conf. on Information Systems Security ((ICISS'08). 1-25.
  99. Litong Song and Krishna Kavi. 2004. What Can We Gain by Unfolding Loops? SIGPLAN Not. 39, 2 (2004), 26-33.
  100. Matheus Souza, Mateus Borges, Marcelo d'Amorim, and Corina S. Pasareanu. 2011. CORAL: Solving Com- plex Constraints for Symbolic Pathfinder. In Proc. 3rd Int. NASA Formal Methods Symp. 359-374.
  101. Nick Stephens, John Grosen, Christopher Salls, Andrew Dutcher, Ruoyu Wang, Jacopo Corbetta, Yan Shoshitaishvili, Christopher Kruegel, and Giovanni Vigna. 2016. Driller: Augmenting Fuzzing Through Selective Symbolic Execution. In 23nd Annual Network and Distr. System Sec. Symp. (NDSS'16).
  102. Aditya Thakur, Junghee Lim, Akash Lal, Amanda Burton, Evan Driscoll, Matt Elder, Tycho Andersen, and Thomas Reps. 2010. Directed Proof Generation for Machine Code. In Proc. 22nd Int. Conf. on Computer Aided Verification (CAV'10). Springer-Verlag, 288-305.
  103. Marek Trtik and Jan Strejček. 2014. Symbolic Memory with Pointers. Springer Int. Publishing, 380-395.
  104. Aliaksei Tsitovich, Natasha Sharygina, Christoph M. Wintersteiger, and Daniel Kroening. 2011. Loop Sum- marization and Termination Analysis. In Proc. Theory and Practice of Software, Proc. 17th Int. Conf. on Tools and Algorithms for the Construction and Analysis of Systems (TACAS'11/ETAPS'11). 81-95.
  105. Heila van der Merwe, Oksana Tkachuk, Brink van der Merwe, and Willem Visser. 2015. Generation of Library Models for Verification of Android Applications. SIGSOFT Software Engineering Notes 40, 1 (2015), 1-5.
  106. Willem Visser, Jaco Geldenhuys, and Matthew B. Dwyer. 2012. Green: Reducing, Reusing and Recycling Constraints in Program Analysis. In Proc. ACM SIGSOFT 20th Int. Symp. on the Foundations of Soft- ware Engineering (FSE'12). ACM, Article 58.
  107. Willem Visser, Corina S. Pasareanu, and Sarfraz Khurshid. 2004. Test Input Generation with Java PathFinder. In Proc. 2004 ACM SIGSOFT Int. Symp. on Software Testing and Analysis. ACM, 97-107.
  108. Jonas Wagner, Volodymyr Kuznetsov, and George Candea. 2013. Overify: Optimizing Programs for Fast Verification. In Proc. 14th USENIX Conf. on Hot Topics in Operating Systems. USENIX Association.
  109. Haijun Wang, Ting Liu, Xiaohong Guan, Chao Shen, Qinghua Zheng, and Zijiang Yang. 2017. Dependence Guided Symbolic Execution. IEEE Transactions Software Engineering (TSE) 43, 3 (2017), 252-271.
  110. Mark Weiser. 1984. Program Slicing. IEEE Transactions on Software Engineering SE-10, 4 (1984), 352-357.
  111. Xusheng Xiao, Tao Xie, Nikolai Tillmann, and Jonathan de Halleux. 2011. Precise Identification of Problems for Structural Test Generation. In Proc. 33rd Int. Conf. on Software Engineering (ICSE'11). 611-620.
  112. Tao Xie, Nikolai Tillmann, Jonathan de Halleux, and Wolfram Schulte. 2009. Fitness-guided path explo- ration in dynamic symbolic execution. In Proc. 2009 IEEE/IFIP Int. Conf. on Dependable Systems and Networks (DSN'09). 359-368.
  113. Xiaofei Xie, Bihuan Chen, Yang Liu, Wei Le, and Xiaohong Li. 2016. Proteus: Computing Disjunctive Loop Summary via Path Dependency Analysis. In Proc. 2016 24th ACM SIGSOFT Int. Symp. on Foundations of Software Engineering (FSE'16). 61-72.
  114. Yichen Xie and Alex Aiken. 2005. Scalable Error Detection Using Boolean Satisfiability. In Proc. 32nd ACM SIGPLAN-SIGACT Symp. on Principles of Programming Languages (POPL'05). ACM, 351-363.
  115. Guowei Yang, Corina S. Pasareanu, and Sarfraz Khurshid. 2012. Memoized Symbolic Execution. In Proc. 2012 Int. Symp. on Software Testing and Analysis (ISSTA'12). ACM, 144-154.
  116. Guowei Yang, Suzette Person, Neha Rungta, and Sarfraz Khurshid. 2014. Directed Incremental Symbolic Execution. ACM Transactions on Software Engineering and Methodology (TOSEM) 24, 1, Article 3 (2014).
  117. Qiuping Yi, Zijiang Yang, Shengjian Guo, Chao Wang, Jian Liu, and Chen Zhao. 2015. Postconditioned Sym- bolic Execution. In 2015 IEEE 8th Int. Conf. on Software Testing, Verification and Validation (ICST).
  118. Yufeng Zhang, Zhenbang Chen, Ji Wang, Wei Dong, and Zhiming Liu. 2015. Regular Property Guided Dy- namic Symbolic Execution. In Proc. 37th Int. Conf. on Software Engineering (ICSE'15). 643-653.
  119. Yunhui Zheng, Xiangyu Zhang, and Vijay Ganesh. 2013. Z3-str: A Z3-based String Solver for Web Applica- tion Analysis. In Proc. 2013 9th Joint Meeting on Foundations of Software Engineering. ACM, 114-124.