-
Notifications
You must be signed in to change notification settings - Fork 4
Home
- What is Attestor?
- System Requirements
- Reproducing Benchmarks (without installation)
- Installation
- Getting Started
- Troubleshooting
- Detailed Walkthrough
- Command Line Options
- LTL Specification Syntax
- Graphical User Interface
- Architecture
- Glossary
Attestor is a verification tool that attempts to achieve both of these goals. To this aim, it first constructs an abstract state space of the input program by means of symbolic execution. Each state depicts both links between heap objects and values of program variables using a graph representation. Abstraction is performed on state level by means of graph grammars. They specify the data structures maintained by the program, and describe how to summarise substructures of the heap in order to obtain a finite representation. After labelling each state with propositions that provide information about structural properties such as reachability or heap shapes, the actual verification task is performed in a second step. To this aim, the abstract state space is checked against a user-defined LTL specification. In case of violations, a counterexample is provided.
The following software has to be installed prior to the installation of Attestor:
- Java JDK 1.8
- Apache Maven
- (Windows) Since Attestor uses soot, please make sure that rt.jar is in your CLASSPATH.
(Unix-based operating systems)
$ git clone https://github.com/moves-rwth/attestor-examples.git
$ chmod +x run.sh
$ ./run.sh
(All operating systems)
$ git clone https://github.com/moves-rwth/attestor-examples.git
$ mvn clean install exec:exec@run
Given the system requirements, no installation of Attestor is required to reproduce and comprehend previously reported benchmark results. We collect all benchmarks in a separate repository including auxiliary scripts to install, run and evaluate all benchmarks. Please confer the documentation in the benchmark repository for further details.
$ git clone https://github.com/moves-rwth/attestor.git
$ mvn install
Please note that the installation requires an internet connection as maven will install additional dependencies.
After installation, an executable jar file is created in the directory target within the cloned repository. The name of executable jar is of the form
attestor-<VERSION>-jar-with-dependencies.jar
where <VERSION> is the previously cloned version of the Attestor repository.
To execute Attestor, it suffices to run
$ java -jar attestor-<VERSION>-jar-with-dependencies.jar
from within the target directory.
This should display a help page explaining all available command line options.
Since the above jar file contains all dependencies, it is safe to rename it and move the file to a more convenient directory.
Detailed step-by-step instructions on using Attestor to analyze Java programs are found on the detailed walkthrough page.
Furthermore, we maintain a collection of running examples (including source code, user-defined graph grammars, and configuration files) in a separate repository. All of these examples can be directly executed using provided auxiliary scripts. Please confer the documentation in the examples repository for further details.
Attestor is developed at the Chair for Software Modeling and Verification at RWTH Aachen University by
- Christoph Matheja,
- Hannah Arndt,
- Christina Jansen, and
- Thomas Noll.
- Christina Jansen, Jens Katelaan, Christoph Matheja, Thomas Noll, Florian Zuleger: Unified Reasoning About Robustness Properties of Symbolic-Heap Separation Logic. ESOP: 611-638 (2017)
- Jonathan Heinen, Christina Jansen, Joost-Pieter Katoen, Thomas Noll: Juggrnaut: using graph grammars for abstracting unbounded heap structures. Formal Methods in System Design 47(2): 159-203 (2015)
- Jonathan Heinen, Christina Jansen, Joost-Pieter Katoen, Thomas Noll: Verifying pointer programs using graph grammars. Sci. Comput. Program. 97: 157-162 (2015)
- Christoph Matheja, Christina Jansen, Thomas Noll: Tree-Like Grammars and Separation Logic. APLAS: 90-108 (2015)
- Christina Jansen, Thomas Noll: Generating Abstract Graph-Based Procedure Summaries for Pointer Programs. ICGT 2014: 49-64