A Solver for a Theory of Strings and Bit-vectors
Sanu Subramanian, Murphy Berzish, Yunhui Zheng, Omer Tripp, Vijay, Ganesh

TL;DR
This paper introduces Z3strBV, a native string and bit-vector solver that improves efficiency over existing methods, enabling effective analysis of C/C++ code for security vulnerabilities and overflows.
Contribution
The paper presents Z3strBV, a decision procedure for a combined string and bit-vector theory, with optimizations and experimental validation demonstrating superior performance.
Findings
Z3strBV outperforms reduction-based solvers in efficiency.
Decidability of the combined string and bit-vector theory is proven.
Successfully detects real-world security vulnerabilities.
Abstract
We present a solver for a many-sorted first-order quantifier-free theory of string equations, string length represented as bit-vectors, and bit-vector arithmetic aimed at formal verification, automated testing, and security analysis of C/C++ applications. Our key motivation for building such a solver is the observation that existing string solvers are not efficient at modeling the string/bit-vector combination. Current approaches either reduce strings to bit-vectors and use a bit-vector solver as a backend, or model bit-vectors as natural numbers and use a solver for the combined theory of strings and natural numbers. Both these approaches are inefficient for different reasons. Modeling strings as bit-vectors destroys structure inherent in string equations thus missing opportunities for efficiently deciding such formulas, and modeling bit-vectors as natural numbers is known…
Peer Reviews
No public reviews on file for this paper yet. If you reviewed it on a platform where reviews are public (OpenReview, ICLR, NeurIPS, ICML), you can paste yours below so the community can read it here.
Videos
No videos yet. Explain this paper in a talk, walkthrough, or lecture? Add one.
Taxonomy
TopicsWeb Application Security Vulnerabilities · Software Testing and Debugging Techniques · Security and Verification in Computing
