/awesome-symbolic-execution

A curated list of awesome symbolic execution resources including essential research papers, lectures, videos, and tools.

Creative Commons Zero v1.0 UniversalCC0-1.0

Awesome Symbolic Execution Awesome

A curated list of awesome symbolic execution resources including essential research papers, lectures, videos, and tools.

Table of Contents

Papers

Fundamental papers:

Symbolic execution survey:

Courses

Videos

Tools

Java

  • Symbolic PathFinder (SPF) - Symbolic execution tool built on Java PathFinder. Supports multiple constraint solvers, lazy initialization, etc.
  • JDart - Dynamic symbolic execution tool built on Java PathFinder. Supports multiple constraint solvers using JConstraints.
  • CATG - Concolic execution tool that uses ASM for instrumentation. Uses CVC4.
  • LimeTB - Concolic execution tool that uses Soot for instrumentation. Supports Yices and Boolector. Concolic execution can be distributed.
  • Acteve - Concolic execution tool that uses Soot for instrumentation. Originally for Android analysis. Supports Z3.
  • jCUTE - Concolic execution tool that uses Soot for instrumentation. Supports lp_solve.
  • JFuzz - Concolic execution tool built on Java PathFinder.
  • JBSE - Symbolic execution tool that uses a custom JVM. Supports CVC3, CVC4, Sicstus, and Z3.
  • Key - Theorem Prover that uses specifications written in Java Modeling Language (JML).

LLVM

  • KLEE - Symbolic execution engine built on LLVM. Uses STP.
  • Cloud9 - Parallel symbolic execution engine built on KLEE.
  • Kite - Based on KLEE and LLVM.

.NET

  • PEX - Dynamic symbolic execution tool for .NET. Uses Z3.

C

  • CREST.
  • DART - A tool that performs directed automated random testing of C programs. Uses CIL and lp_solve.
  • Otter - A directed symbolic execution tool that is used to reach a particular target line. Uses STP.
  • CIVL - A framework that includes the CIVL-C programming language, a model checker and a symbolic execution tool.
  • CUTE - A concolic unit testing engine for C. Uses CIL and lp_solve.

JavaScript

  • Jalangi2 - A framework for writing dynamic analyses for JavaScript.
  • SymJS - Automatic symbolic testing of JavaScript web applications. Uses Yices.

Python

  • PyExZ3 - Symbolic execution of Python functions. A rewrite of the NICE project's symbolic execution tool.

Ruby

  • Rubyx - Symbolic execution tool for Ruby on Rails web apps. Uses Drails and Yices.

Android

  • SymDroid - Symbolic execution for Dalvik bytecode. Uses Z3.

Binaries

  • Mayhem - A system for finding exploitable bugs in binary programs. Is based on hybrid (online and offline) dynamic symbolic execution. Uses Pin and BAP as well as Z3. The winner of 2016 DARPA CGC.
  • SAGE - Whitebox file fuzzing tool for X86 Windows applications. Uses Z3.
  • BitBlaze - A binary analysis platform. Uses STP.
  • PathGrind - Path-based dynamic analysis for 32-bit programs.
  • FuzzBALL - Symbolic execution tool built on the BitBlaze Vine component.
  • S2E - Symbolic execution platform supporting x86, x86-64, or ARM software stacks. Based on QEMU, KLEE, and LLVM.
  • miasm - Reverse engineering framework. Includes symbolic execution.
  • pysymemu - Supports x86/x64 binaries.
  • BAP - Binary Analysis Platform provides a framework for writing program analysis tools.
  • angr - Python framework for analyzing binaries. Includes a symbolic execution tool. Based on VEX, Unicorn, and Z3.
  • Triton - Dynamic binary analysis platform that includes a dynamic symbolic execution tool based on Pin and Capstone.
  • manticore - symbolic execution tool for binaries (x86, x86_64 and ARMV7) and Ethereum smart contract bytecode

Misc

  • Symbooglix - Symbolic execution tool for Boogie programs.