S2E: The Selective Symbolic Execution Platform

S2E is a platform for writing tools that analyze the properties and behavior of software systems. S2E comes as a modular library that gives virtual machines symbolic execution and program analysis capabilities. S2E runs unmodified x86, x86-64, or ARM software stacks, including programs, libraries, the kernel, and drivers. Symbolic execution then automatically explores hundreds of thousands of paths through the system, while analyzers check that the desired properties hold on these paths and selectors focus path exploration on components of interest.

This documentation explains in details how to set up S2E, how to symbolically execute programs, and how to find vulnerabilities in them.

Plugin reference

OS monitors

To implement selectivity, S2E relies on several OS-specific plugins to detect module loads/unloads and execution of modules of interest.

Execution tracers

These plugins record various types of multi-path information during execution. This information can be processed by offline analysis tools. Refer to the How to use execution tracers? tutorial to understand how to combine these tracers.

Annotation plugins

These plugins allow the user to write plugins in Lua.

Miscellaneous plugins

  • FunctionMonitor provides client plugins with events triggered when the guest code invokes specified functions.
  • FunctionModels reduces path explosion by transforming common functions into symbolic expressions.
  • EdgeKiller kills execution paths that execute some sequence of instructions (e.g., polling loops).