Expand description
This module implements the core of the symbolic execution engine.
Structs§
- Frame
- A
Frameis an immutable snapshot of the program state while it is being symbolically executed. - Local
Frame - A
LocalFrameis a mutable frame which is used by a currently executing thread. It is turned into an immutableFramewhen the control flow forks on a choice, which can be shared by threads. - Task
- A
Taskis a suspended point in the symbolic execution of a program. It consists of a frame, which is a snapshot of the program variables, a checkpoint which allows us to reconstruct the SMT solver state, and finally an option SMTLIB definiton which is added to the solver state when the task is resumed. - Task
State
Functions§
- all_
unsat_ collector - This
Collectoris used for boolean Sail functions. It returns true via an AtomicBool if all reachable paths through the program are unsatisfiable, which implies that the function always returns true. - footprint_
collector - freeze_
frame - start_
multi - Start symbolically executing a Task across
num_threadsnew threads, collecting the results using the given collector. - start_
single - Start symbolically executing a Task using just the current thread, collecting the results using the given collector.
- symbolic
- Create a Symbolic value of a specified type. Can return a concrete value if the type only
permits a single value, such as for the unit type or the zero-length bitvector type (which is
ideal because SMT solvers don’t allow zero-length bitvectors). Compound types like structs will
be a concrete structure with symbolic values for each field. Returns the
NoSymbolicTypeerror if the type cannot be represented in the SMT solver. - trace_
collector - trace_
result_ collector - trace_
value_ collector - unfreeze_
frame
Type Aliases§
- Backtrace
- Collector
- A collector is run on the result of each path found via symbolic execution through the code. It takes the result of the execution, which is either a combination of the return value and local state at the end of the execution or an error, as well as the shared state and the SMT solver state associated with that execution. It build a final result for all the executions by collecting the results into a type R.
- Trace
Queue - Trace
Result Queue - Trace
Value Queue