Boomerang is an efficient and precise pointer and dataflow analysis framework based on a Synchronized Pushdown Systems (SPDS). SPDS relies on two pushdown systems that model field-sensitivity and context-sensitivity separately. Combining (synchronizing) both systems enables a field-sensitive and context-sensitive analysis that is also flow-sensitive. Detailed information can be found here.
This repository contains:
- a Java implementation of Synchronized Pushdown Systems.
- Boomerang to calculate on-demand points-to and dataflow information using a Synchronized Pushdown System.
- IDEal, an IDE solver based on a Weighted Pushdown System that uses Boomerang to compute alias information only when required (i.e. on-demand).
- Implementation of scopes that allows you to run Boomerang and IDEal with the static analysis frameworks Soot.
Boomerang code examples can be found here. Code examples for IDEal are given here.
The projects are released on Maven Central and can be included as a dependency in .pom
files (replace x.y.z
with the latest version).
- Boomerang can be included with the following dependency:
<dependency>
<groupId>de.fraunhofer.iem</groupId>
<artifactId>boomerangPDS</artifactId>
<version>x.y.z</version>
</dependency>
- IDEal can be included with the following dependency:
<dependency>
<groupId>de.fraunhofer.iem</groupId>
<artifactId>idealPDS</artifactId>
<version>x.y.z</version>
</dependency>
We hare happy for every contribution from the community! You can simply create a fork and open a pull request. Note that we use the Google style sheet to keep the code clean. To format the code, run the command
mvn spotless:apply
before commiting your changes.