2016
DOI: 10.1007/s10817-016-9389-x
|View full text |Cite
|
Sign up to set email alerts
|

Automatically Proving Termination and Memory Safety for Programs with Pointer Arithmetic

Abstract: While automated verification of imperative programs has been studied intensively, proving termination of programs with explicit pointer arithmetic fully automatically was still an open problem. To close this gap, we introduce a novel abstract domain that can track allocated memory in detail. We use it to automatically construct a symbolic execution graph that over-approximates all possible runs of a program and that can be used to prove memory safety. This graph is then transformed into an integer transition s… Show more

Help me understand this report

Search citation statements

Order By: Relevance

Paper Sections

Select...
2
1
1
1

Citation Types

0
5
0

Year Published

2017
2017
2022
2022

Publication Types

Select...
7
2

Relationship

2
7

Authors

Journals

citations
Cited by 19 publications
(5 citation statements)
references
References 60 publications
(53 reference statements)
0
5
0
Order By: Relevance
“…To make use of the wide range of existing sequential bound analyzers for integer programs (e.g., [4,6,9,12,20,23,36]), our method translates the pointer program I into an equivalent integer program I : Using the technique of [8], our algorithm translates the interleaved program with pointers I = P Instr(R) and predicate Inv ∧ g 0 into a bisimilar integer programÎ and predicate Inv ∧ g 0 . Alternatively, one could directly compute bounds on the pointer program I using techniques such as described in [3,17,37].…”
Section: Translation To Integer Programsmentioning
confidence: 99%
“…To make use of the wide range of existing sequential bound analyzers for integer programs (e.g., [4,6,9,12,20,23,36]), our method translates the pointer program I into an equivalent integer program I : Using the technique of [8], our algorithm translates the interleaved program with pointers I = P Instr(R) and predicate Inv ∧ g 0 into a bisimilar integer programÎ and predicate Inv ∧ g 0 . Alternatively, one could directly compute bounds on the pointer program I using techniques such as described in [3,17,37].…”
Section: Translation To Integer Programsmentioning
confidence: 99%
“…For all of these programming languages, AProVE uses an approach to transform the original program into a simple back-end language (an integer transition system or a combination of ITSs and TRSs) and to prove termination of the resulting back-end system instead [47]. In contrast, the tool UltimateAutomizer [16] uses a generalization of program paths to Büchi Automata in order to remove terminating paths.…”
Section: Termination Of Programsmentioning
confidence: 99%
“…There are a number of related tools that can check pointer programs for memory safety. For example: a combination of ccured [Necula et al 2002] and blast [Henzinger et al 2003] due to Beyer et al [2005], invader [Yang et al 2008], xisa [Laviron et al 2010], slayer [Berdine et al 2011], infer [Calcagno and Distefano 2011], forester [Holík et al 2013], predator [Dudka et al 2013;Holík et al 2016], and aprove [Ströder et al 2017]. These tools can only handle sequential code.…”
Section: Related Workmentioning
confidence: 99%