Symbolic and Abstract Interpretation for C/C++ Programs
Author: Helge Löding and Jan Peleska:
Abstract:
We present a construction technique for abstract interpretations which is
generic in the choice of data abstractions. The technique is specialised on
C/C++ code, internally represented by the GIMPLE control flow graph as
generated by the gcc compiler. The generic interpreter handles program
transitions in a symbolic way, while recording a history of symbolic memory
valuations. An abstract interpreter is instantiated by selecting appropriate
lattices for the data types under consideration. This selection induces an
instance of the generic transition relation. All resulting abstract
interpretations can handle pointer arithmetic, type casts, unions and the
aliasing problems involved. It is illustrated how switching between
abstractions can improve the efficiency of the verification process. The
concepts described in this paper are implemented in the test automation and
static analysis tool RT-Tester which is used for the verification of
embedded systems in the fields of avionics, railways and automotive control.
PDF file (345KB) (Extended version of
a submission to 3rd intl
Workshop on Systems Software Verification (SSV08)
)