Skip to content
Open access

Compiling WebAssembly Concolic Execution with Staging, Continuations, and Snapshots

Aug 2026 · Proceedings of the ACM on Programming Languages · Vol 10, pp. 1437 - 1464 · 0 citations · 59 references
Computer Science

TL;DR

This paper develops a definitional concolic interpreter and stage it to compile away interpretation overhead while retaining the simplicity of an interpretation-based implementation, and develops a heuristic that favors snapshot-reuse only when it is expected to be beneficial.

Abstract

Concolic execution is a variant of symbolic execution that runs a program simultaneously with concrete and symbolic inputs. It records the symbolic constraints encountered along a concrete execution path, then solves those constraints to generate inputs that explore new paths. Existing concolic engines generally follow one of two implementation strategies: Interpreter-based systems are comparatively simple to build but incur substantial interpretation overhead, while instrumentation-based systems avoid this overhead but typically re-execute the program from the beginning for each new input. In this paper, we develop a new approach that achieves the best of both worlds. Starting from the concrete semantics of the target language, we first develop a definitional concolic interpreter and stage it to compile away interpretation overhead while retaining the simplicity of an interpretation-based implementation. By expressing the staged interpreter in continuation-passing style, we can capture execution snapshots at branch points and resume from them when exploring alternative paths, avoiding repeated execution from the program entry. Because snapshot-reuse can itself incur overhead, we further develop a heuristic that favors snapshot-reuse only when it is expected to be beneficial. We instantiate this approach for WebAssembly and implement it in a new concolic-execution compiler GenWasym. Across 184 benchmarks, GenWasym with staging along achieves a 29.4X average speedup over the interpreter-based WASP; heuristic snapshot-reuse further increases the speedup to 44.9X.

Read PDF

Similar papers

#software testing Book Open access Oct 2026

Towards a Vertically Integrated Compiler Infrastructure to Improve Solver Time during Symbolic Execution

The potential of integrating the compiler infrastructure with symbolic execution, thereby obtaining a program representation optimized for SMT solving, is illustrated by contributing conditional representation, a novel compiler transformation tailored to symbolic execution that results in a solver-efficient representat...

Sören Tempel, Christian Dietrich · 0 citations
#software testing Open access Oct 2026

Random Testing via Runtime Abstract Interpretation

Property-based testing of C programs can be automated by synthesizing random input generators from separation-logic specifications. Existing work in this space, such as the Bennet testing tool, uses randomized backtracking search, generating random values and checking them against constraints, backtracking on failure....

Zain K. Aamer, Benjamin C. Pierce · 1 citation
#artificial intelligence Preprint Sep 2026

Dynamic Adaptation of the LLM Context for Generating Routines with Coupled Semantics

LLM-based code generation fails when correctness depends on execution-dependent coupling: the meaning of one routine is defined by the runtime behavior of another, a relationship that cannot be resolved from textual descriptions alone. This limitation, which we call static binding, is not confined to explicitly coupled...

Gnaneswar Villuri, Hashmath Shaik, Alex Doboli · 1 citation
Open access 2026

Rethinking Exception Handling in a Lightweight JavaScript Interpreter

Dynamic language interpreters must handle exceptions as part of normal execution, since many semantic checks are performed at runtime. In interpreter-based JavaScript engines, particularly in lightweight or resource-constrained environments, exception propagation is often implemented using return-based mechanisms, wher...

Zoltán Herczeg, Seong-Moo Kim, Hyukwoo Park · 0 citations

Out of the Loop No More: Online Abstract Debugging with Loop Stepping

This paper proposes online abstract debugging, which performs abstract interpretation on demand as the developer steps through the program, and instantiate this model for WebAssembly and presents a prototype implementation, demonstrating that developers can effectively draw sound conclusions about complex, potentially...

J. Alvim, Maarten Steevens, Christophe Scholliers et al. · 0 citations

We use cookies to run the site and, with your consent, for analytics and to show ads. See our Cookie Policy.