Latest Releases
You can find the latest stable version of S2E on master. We compile here from time to time a list of important updates.
2024-06-02
- Removed old CGC image.
- Implemented user-mode CGC syscall emulation to enable symbolic execution of CGC binaries on a normal Linux setup.
- Implemented a CGC PoV verification tool.
2024-04-13
- Added support for Linux 6.8.2 guests.
- Upgraded to libdwarf 0.9.1, which gives better support for debug symbols.
- Fixed slow symbol lookup in s2e-env.
- Fixed pretty printer support when running S2E in GDB.
2024-03-17
- Upgraded TCG to 8.1.2.
- Added Debian 12.5 support (host + guest images).
2023-12-10
- Upgraded TCG to 7.2.0.
- Use pre-compiled LLVM/Clang to reduce build time.
- Cleaned up KLEE APIs to access guest memory.
- Various fixes and improvements in execution tracer plugins.
- Removed Revgen.
2022-07-24
- Added support for Ubuntu 22.04 and Debian 11.3 guest images.
- Removed support for Debian 9 images.
- Replaced
s2eget
ands2eput
withs2ecmd get|put
.
2022-05-03
- Upgraded the symbolic execution engine to LLVM 14.
- Added support for Debian 11 and Ubuntu 22.04 LTS.
2021-02-14
- Added control flow integrity checker with Microsoft Office support.
UserSpaceTracer
plugin supports per-thread tracing.- Added the
Tickler
plugin and the corresponding Windows guest tool in order to automatically click on dialog boxes while testing Microsoft Office and other apps. - Added the
Screenshot
plugin in order to record screenshots of the guest. - Added a command to
s2e-env
to automatically generate S2E plugin boilerplate.
2020-06-16
- Added support for Microsoft Office 2010, 2013, 2016, 2019.
- Added tutorial about symbolic execution of VBA macros.
- Improved image building makefile to make it easier to add support for other Windows apps.
- Better support for seed files in
s2e new_project
. - Added
libs2e.dll
to make it easier to call S2E APIs from other programs. - Removed Windows 8.1 and 10 1703 images.
2020-05-01
- Upgraded to LLVM 10.0.0.
- Added support for Ubuntu 20.04 LTS.
- Updated the Windows 10 image to 1909.
- Applied latest patches to Windows XP and 7 images (up to 2016 and 2020 respectively).
2020-02-17
2020-02-03
- Upgraded to LLVM 9.0.0 from 3.9.1.
- S2E now compiles with Clang 9.0.
- Consolidated the 14 repositories that composed
libs2e
into a monorepo. The old repositories will be deleted after Feb 14.
2019-12-07
- Upgraded the code generation backend (TCG, Tiny Code Generator) from version 1.0 to 4.0. This is a prerequisite for upgrading the x86 translator to support new instruction sets.
- Tutorial on how to profile S2E.
- Fixed memory leaks and optimized memory usage in KLEE. Made all KLEE expressions immutable, merged
MemoryObject
andObjectState
, removed unused fields, use reference counting for all objects, minimize memory allocations, etc. - Optimized calling of external functions in KLEE. Invoke these functions directly instead of generating complex LLVM stubs for every call site.
- Fixed sign extension in solver interface that was resulting in incorrect solver results.
- Fixed performance bug in the expression simplifier that was causing symbolic execution to get stuck on large expressions.
- Upgraded the docker image from Ubuntu 16.04 to 18.04.
- Ubuntu 16.04 is not supported anymore due to
glib
package issues.
2019-05-29
- Support for symbolic FP/MMX/SSE registers on x86 guests. You can now run programs that use these registers without forcing concretizations when symbolic data enters them. Big thanks to @humeafo for implementing this!
- Added a testsuite. It covers most tutorials and exercises major aspects of S2E functionality. This should considerably reduce regressions and make it easier for you to add new features without fearing of breaking things.
- Major performance improvements for concrete/symbolic execution and faster parallel mode.
- Code coverage generation is now orders of magnitude faster for large binaries. You will get a Linux kernel coverage report in seconds instead of minutes.
- Plugins now record execution traces in
protobuf
format. - Fixed guest hangs when running S2E in parallel mode (by Alan Wang).
- Many other bug fixes and improvements both in the code and the documentation.
2019-01-14
- QEMU 3.0 support
- Windows 7 32-bit guest support
- Ubuntu 18.04 host support
- Documentation updates
- KVM interface design
- Testing error recovery code in Windows drivers with multi-path fault injection
- Using SystemTap with S2E
- Combining Kaitai Struct and S2E for analyzing parsers
- Analyzing trigger-based malware with S2E
- Automated proof of vulnerability generation on Linux, Windows, and Decree platforms
- Getting code coverage for various types of binaries
- Setting up Windows development environment
- Various engine fixes and refactorings
2017-10-16 - S2E V2.0
- Rearchitected version of S²E, decoupled from QEMU
- KVM-compatible interface
libs2e.so
is a shim library that interceptsioctl
to/dev/kvm
- can be
LD_PRELOAD
ed into QEMU or any other KVM-compatible VMM.
- Modular and flexible architecture, any component of S²E can be reused independently
libs2e
: exposes the symbolic execution engine and the dynamic binary translator through a KVM-compatible interfacelibs2ecore
: main S²E execution enginelibs2eplugins
: S²E pluginslibcpu
: processor emulation library, extracted from QEMU 1.0libtcg
: dynamic binary translator backend, extracted from QEMU 1.0libvmi
: virtual machine introspection librarylibq
: JSON serialization support, to interface S²E with Web services, extracted from QEMU 1.0libcoroutine
: cooperative threading support, extracted from QEMU 1.0libfsigc++
: fast drop-in replacement for thelibsigc++
libraryklee
: symbolic LLVM interpreterlua
: LUA scripting engine
- Supports latest versions of Linux and Windows XP, 7, 8, 8.1, 10
- Windows crash dump generation, compatible with WinDbg
- Exposes OS events to plugins (process/thread creation/destruction, memory mappings, module loads, etc.)
- Advanced tooling to easily set up symbolic execution for arbitrary programs
- Automatic generation of S²E configuration file and launch script based on the binary to analyze
- Easy file transfers between the guest and the host during symbolic execution, ideal for per-path core dump extraction, etc.
- Code coverage support
- Up to 6x faster concrete execution than S²E 1.3
- Z3 constraint solver
- Extensive set of plugins and tools for vulnerability analysis and proof of vulnerability generation
- Easily show the exploitability of a crash
- Demonstrated during the DARPA Cyber Grand Challenge
- Concolic execution
- State merging
- Exponentially reduces number of paths to explore by combining similar execution paths
- Function models
- Exponentially reduces number of paths to explore by replacing standard library functions with equivalent models
- Advanced path searchers
- Modular searcher architecture, mix and match existing searchers, and combine them with your own
- Class-Uniform Path Analysis minimizes likelihood of exploration getting stuck
- Fuzzer integration
SeedSearcher
plugin automatically picks up seeds generated by a fuzzer or other analysis tools and schedules them for exploration- Generate new test cases that can be used to guide fuzzers and other tools
- Revgen: static x86 to LLVM translator
Old Releases
The following releases are archived.
2013-12-05 - S2E V1.3
- x86-64 guests support, LLVM 3.2
2012-04-27 - S²E V1.2
- QEMU 1.0, LLVM 3.0, Clang
- S²E now includes the latest features of QEMU and uses a modern toolchain
- Concolic Execution
- Reuse your existing testsuites to easily reach deep parts of programs under analysis
2011-09-10 - S²E V1.1
- Experimental ARM support
- Analyze embedded applications
- Available in the arm-experimental branch of the repository
- Multi-core support
- Explore orders of magnitude more paths
- 20x faster plugin infrastructure
- Complete plugin-intensive analyses such as Windows driver testing in minutes instead of hours
- 2x faster concrete execution
- Run bigger systems