DOI: 10.29007/dc9b
|View full text |Cite
|
Sign up to set email alerts
|

Arrays Made Simpler: An Efficient, Scalable and Thorough Preprocessing

Abstract: The theory of arrays has a central place in software verification due to its ability to model memory or data structures. Yet, this theory is known to be hard to solve in both theory and practice, especially in the case of very long formulas coming from unrolling-based verification methods. Standard simplification techniques à la read-over-write suffer from two main drawbacks: they do not scale on very long sequences of stores and they miss many simplification opportunities because of a crude syntactic (dis-)e… Show more

Help me understand this report

Search citation statements

Order By: Relevance

Paper Sections

Select...
2
1
1
1

Citation Types

1
21
0

Publication Types

Select...
2
2
2

Relationship

3
3

Authors

Journals

citations
Cited by 11 publications
(22 citation statements)
references
References 20 publications
1
21
0
Order By: Relevance
“…If we can determine that the index a of the load is distinct from the index of the second store a 2 then, by the theory of arrays, we have t 2 = t 1 thus the path x → t 2 and all of its subpaths are redundant. We rely on a well-known optimization for symbolic arrays called read-over-write [37] to detect and prune these redundant cases.…”
Section: Haunted Relsementioning
confidence: 99%
See 2 more Smart Citations
“…If we can determine that the index a of the load is distinct from the index of the second store a 2 then, by the theory of arrays, we have t 2 = t 1 thus the path x → t 2 and all of its subpaths are redundant. We rely on a well-known optimization for symbolic arrays called read-over-write [37] to detect and prune these redundant cases.…”
Section: Haunted Relsementioning
confidence: 99%
“…2) Evaluation of load expressions: Load expressions can either take their value from a pending store in the store buffer with a matching address via store-to-load forwarding; or can speculatively bypass pending stores in the store buffer and take their value from the main memory [30]. Instead of considering all possible interleavings between a load expression and prior stores in the store-buffer, we use read-over-write [37] to identify and discard most cases in which the load and a prior store naturally commute. Read-over-write is a well known simplification for the theory of arrays which resolves select operations on symbolic arrays ahead of the solver.…”
Section: Haunted Relsementioning
confidence: 99%
See 1 more Smart Citation
“…We will use the type Bv m , where m is a constant number, to represent symbolic bitvector expressions. The memory is modeled with a logical array [65], [66] of type (Array Bv 32 Bv 8 ) (assuming a 32 bit architecture). A logical array is a function (Array I V) that maps each index i ∈ I to a value v ∈ V. Operations over arrays are:…”
Section: Binary-level Symbolic Executionmentioning
confidence: 99%
“…Binsec/RSE emits quantified formulas in the theory of bitvectors and arrays (arrays are used to model memory) which are then solved by the quantified solver Z3 [22]. We reuse the recent ROW simplification [26] to reduces the number of array indexations. The source code of Binsec/RSE, the test suite and the case studies of this section are available for reproduction at https://github.com/binsec/cav2021-artifacts and https:// zenodo.org/record/4721753.…”
Section: Methodsmentioning
confidence: 99%