A Reachability Predicate for Analyzing Low-Level Software

Shaunak Chatterjee, Shuvendu Lahiri, Shaz Qadeer, Zvonimir Rakamaric. Microsoft Research Tech Report MSR-TR-2006-154, November, 2006.
[pdf] [bib]

Abstract: Reasoning about heap-allocated data structures such as linked lists and arrays is challenging. The reachability predicate has proved to be very useful for such reasoning in type-safe languages such as Java in which memory is manipulated by dereferencing object fields. Sound and precise analysis for such data structures becomes significantly more challenging in the presence of low-level pointer manipulation that is prevalent in systems software.
In this paper, we give a novel formalization of the reachability predicate in the presence of internal pointers and pointer arithmetic. We have designed an annotation language for C programs that makes use of the new predicate. This language enables us to specify properties of many interesting data structures present in the Windows kernel. We present preliminary experience with a prototype verifier on a set of illustrative C benchmarks.

Bibtex:

@techreport{msr-tr-2006-154,
  author = {Shaunak Chatterjee and Shuvendu Lahiri and
    Shaz Qadeer and Zvonimir Rakamari\'c},
  title = {A Reachability Predicate for Analyzing Low-Level Software},
  institution = {Microsoft Research},
  year = {2006},
  month = {November},
  number = {MSR-TR-2006-154},
}