S2E: The Selective Symbolic Execution Platform¶
S2E is a platform for writing tools that analyze the properties and behavior of software systems. S²E comes as a modular library that gives virtual machines symbolic execution and program analysis capabilities. S²E 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.
- Getting Started
- Automated Generation of Proofs of Vulnerability with S2E
- DARPA Cyber Grand Challenge
- Combining Kaitai Struct and S2E for analyzing parsers (external link)
- Measuring code coverage with S2E
- Analysis of Linux binaries
- Analysis of Windows binaries
- Customizing stock VM images
- Moving files between the guest and host
- Communicating between the guest and S2E plugins
- Running S2E on multiple cores
- Writing S2E plugins
- Using execution tracers
- Advanced topics
- S2E Tools
- Frequently Asked Questions
S2E Plugin Reference¶
To implement selectivity, S2E relies on several OS-specific plugins to detect module loads/unloads and execution of modules of interest.
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.
These plugins allow you to specify which paths to execute and where to inject symbolic values.
- EdgeKiller kills execution paths that execute some sequence of instructions (e.g., polling loops).
These plugins allow the user to write plugins in Lua.
- Function and Instruction Annotations
- S2E: A Platform for In Vivo Multi-Path Analysis of Software Systems. Vitaly Chipounov, Volodymyr Kuznetsov, George Candea. 16th Intl. Conference on Architectural Support for Programming Languages and Operating Systems (ASPLOS), Newport Beach, CA, March 2011.
- Testing Closed-Source Binary Device Drivers with DDT. Volodymyr Kuznetsov, Vitaly Chipounov, George Candea. USENIX Annual Technical Conference (USENIX), Boston, MA, June 2010.
- Reverse Engineering of Binary Device Drivers with RevNIC. Vitaly Chipounov and George Candea. 5th ACM SIGOPS/EuroSys European Conference on Computer Systems (EuroSys), Paris, France, April 2010.
- Selective Symbolic Execution. Vitaly Chipounov, Vlad Georgescu, Cristian Zamfir, George Candea. Proc. 5th Workshop on Hot Topics in System Dependability, Lisbon, Portugal, June 2009