Open AccessDissertation
Verification of pointer-based programs with partial information
Chenguang Luo
- 01 Jan 2011
4
TL;DR: This thesis proposes a new approach to program verification that allows users to provide only partial specification to methods and can automatically refine partial specifications with non-trivial constraints, thus making it easier for users to handle specifications with richer properties.
read more
Abstract: The proliferation of software across all aspects of people's life means that software failure can bring catastrophic result. It is therefore highly desirable to be able to develop software that is verified to meet its expected specification. This has also been identified as a key objective in one of the UK Grand Challenges (GC6) (Jones et al., 2006; Woodcock, 2006). However, many difficult problems still remain in achieving this objective, partially due to the wide use of (recursive) shared mutable data structures which are hard to keep track of statically in a precise and concise way.
This thesis aims at building a verification system for both memory safety and functional correctness of programs manipulating pointer-based data structures, which can deal with two scenarios where only partial information about the program is available. For instance the verifier may be supplied with only partial program specification, or with full specification but only part of the program code. For the first scenario, previous state-of-the-art works (Nguyen et al., 2007; Chin et al., 2007; Nguyen and Chin, 2008; Chin et al, 2010) generally require users to provide full specifications for each method of the program to be verified. Their approach seeks much intellectual effort from users, and meanwhile users are liable to make mistakes in writing such specifications. This thesis proposes a new approach to program verification that allows users to provide only partial specification to methods. Our approach will then refine the given annotation into a more complete specification by discovering missing constraints. The discovered constraints may involve both numerical and multiset properties that could be later confirmed or revised by users. Meanwhile, we further augment our approach by requiring only partial specification to be given for primary methods of a program. Specifications for loops and auxiliary methods can then be systematically discovered by our augmented mechanism, with the help of information propagated from the primary methods. This work is aimed at verifying beyond shape properties, with the eventual goal of analysing both memory safety and functional properties for pointer-based data structures. Initial experiments have confirmed that we can automatically refine partial specifications with non-trivial constraints, thus making it easier for users to handle specifications with richer properties.
For the second scenario, many programs contain invocations to unknown components and hence only part of the program code is available to the verifier. As previous works generally require the whole of program code be present, we target at the verification of memory safety and functional correctness of programs manipulating pointer-based data structures, where the program code is only partially available due to invocations to unknown components. Provided with a Hoare-style specification ({Pre} prog {Post}) where program (prog) contains calls to some unknown procedure (unknown), we infer a specification (mspecu) for the unknown part (unknown) from the calling contexts, such that the problem of verifying program (prog) can be safely reduced to the problem of proving that the unknown procedure (unknown) (once its code is available) meets the derived specification (mspecu). The expected specification (mspecu) is automatically calculated using an abduction-based shape analysis specifically designed for a combined abstract domain. We have implemented a system to validate the viability of our approach, with encouraging experimental results.
read more
Chat with Paper
AI Agents for this Paper
Find similar papers on Google Scholar, PubMed and Arxiv
Write a critical review of this paper
Analyze citations of this paper to find unaddressed research gaps
Citations
Component-Based Software Engineering
W. Kozaczynski,Grady Booch +1 more
TL;DR: A state-of-the-practice overview and some of the latest work in CBSE, as well as industry forecasts from two leaders in the field, are presented.
109
The Pointer Assertion Logic Engine
TL;DR: A new framework for verifying partial specifications of programs in order to catch type and memory errors and check data structure invariants is presented, which can verify a large class of data structures, namely all those that can be expressed as graph types.
Modular Pluggable Analyses for Data Structure Consistency
Viktor Kuncak,Patrick Lam,Karen Zee,Martin Rinard +3 more
- 01 Jan 2004
TL;DR: The experience shows that the Hob system can effectively verify the consistency of data structures encapsulated within a single module and combine analysis results from different analysis plug-ins to verify properties involving objects shared by multiple modules analyzed by different analyses.
45
•Journal Article
Automata-based verification of programs with tree updates
TL;DR: This paper describes a verification framework for Hoare-style pre- and post-conditions of programs manipulating balanced tree-like data structures, and shows that, under few restrictions, one can automatically compute the effect of tree-updating program statements on the set of configurations represented by a TASC, which makes TASC a practical verification tool.
28
References
Abstract interpretation: a unified lattice model for static analysis of programs by construction or approximation of fixpoints
Patrick Cousot,Radhia Cousot +1 more
- 01 Jan 1977
TL;DR: In this paper, the abstract interpretation of programs is used to describe computations in another universe of abstract objects, so that the results of abstract execution give some information on the actual computations.
•Book
Isabelle/HOL: A Proof Assistant for Higher-Order Logic
Tobias Nipkow,Markus Wenzel,Lawrence C. Paulson +2 more
- 01 Jan 2002
TL;DR: This presentation discusses Functional Programming in HOL, which aims to provide students with an understanding of the programming language through the lens of Haskell.
3.4K
Separation logic: a logic for shared mutable data structures
John C. Reynolds
- 22 Jul 2002
TL;DR: An extension of Hoare logic that permits reasoning about low-level imperative programs that use shared mutable data structure is developed, including extensions that permit unrestricted address arithmetic, dynamically allocated arrays, and recursive procedures.
Design and Synthesis of Synchronization Skeletons Using Branching-Time Temporal Logic
Edmund M. Clarke,E. Allen Emerson +1 more
- 01 May 1981
TL;DR: It is shown that it is possible to automatically synthesize the synchronization skeleton of a concurrent program from a Temporal Logic specification and it is believed that this approach may in the long run turn out to be quite practical.
2.6K