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 and Opal.
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>
If you plan to install Boomerang and IDEal locally, you can use the following commands to build the project:
mvn clean install -DskipTests
Install the projects and skip all testsmvn clean install -DtestSetup=Soot
Install the projects and run the tests with Soot as the underlying frameworkmvn clean install -DtestSetup=SootUp
Install the projects and run the tests with SootUp as the underlying frameworkmvn clean install -DtestSetup=Opal
Install the projects and run the tests with Opal as the underlying framework
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.