A symbolic execution tool that uses Rust traits to enable seamless switching between concrete and symbolic execution. The system executes Rust code normally while carrying symbolic expressions alongside concrete values.
- Trait-based symbolic types: Drop-in replacements for concrete types (SymU64, SymI32, etc.)
- SMT solver: Uses Z3 for constraint satisfiability and model generation
- Replay-based path exploration: Re-executes the closure with forced branch decisions; undecided branches follow concolic execution and record alternatives
This project requires the Z3 SMT solver to be installed on your system.
brew install z3sudo apt-get install z3 libz3-devDownload and install Z3 from the official releases.
cargo buildcargo runcargo testsrc/symbolic_types.rs- Drop-in symbolic types (ints/bool/string)src/expressions.rs- Abstract syntax tree for symbolic expressionssrc/runtime.rs- Per-run runtime state (decisions + concolic inputs)src/engine.rs- Exploration engine and scheduling primitivessrc/manager.rs- Constraint/variable manager + solver integration helperssrc/solver.rs- SMT solver interface and Z3 integrationsrc/error.rs- Error handling
This project is under active development. The current focus is making the execution/runtime architecture ergonomic and schedulable.
This project is licensed under the Apache License.