What is Qilin?

Qilin is a new pointer (or alias) analysis framework designed for supporting fine-grained context-sensitivity for Java programs precisely, efficiently, and modularly. Qilin enables different variables/objects in a method to be analysed under different context abstractions at the variable level, by supporting naturally the traditional method-level context-sensitivity as a special case.

We refer to SVF for a pointer analysis framework that works for C/C++, and RUPTA for a pointer analysis framework that works for Rust.

What kind of analyses does Qilin provide?

Qilin's toolbox includes already a rich set of pointer analyses for supporting (1) insens (Andersen's context-insensitive analysis), (2) all common flavors of method-level context-sensitivity as listed below: and (3) many flavors of fine-grained context-sensitivity, enabled by different pre-analyses such as: A full list of pointer analyses that are currently supported by Qilin can be found here.

In addition, Qilin can also be used to construct callgraphs for Java programs.

Finally, Qilin can be easily extended to handle Android applications. Work is underway ...

How to setup Qilin?

Please download the source code of Qilin and refer to this step-by-step guide to setup Qilin.

How to run Qilin?

Qilin analyses a Java program by taking its class files or Jar files as input. Please refer to this user guide to run Qilin with a simple example and generate the analysis outputs on your local machine.

Alternatively, we have also prepared a docker image for you to run Qilin on any machine with Docker installed. Please refer to this step-by-step guide to try Qilin in a Docker container.

References

Please refer to this documentation and our ECOOP'22 paper to understand the internal working of Qilin.

You are welcome to use Qilin for research and development purposes under the license given. However, we would request you to kindly cite our ECOOP'22 paper, and possibly other relevant papers also listed below.

Dongjie He, Yujiang Gui, Wei Li, Yonggang Tao, Chaiwei Zou, Yulei Sui, and Jingling Xue. A Container-Usage-Pattern-Based Context Debloating Approach for Object-Sensitive Pointer Analysis, ACM SIGPLAN Conference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA'23)

Dongjie He, Jingbo Lu, and Jingling Xue. IFDS-based Context Debloating for Object-Sensitive Pointer Analysis, ACM Transactions on Software Engineering and Methodology (TOSEM 2023)

Dongjie He, Jingbo Lu, and Jingling Xue. Qilin: A New Framework for Supporting Fine-Grained Context-Sensitivity in Java Pointer Analysis, 36th European Conference on Object-Oriented Programming (ECOOP'22)

Dongjie He, Jingbo Lu, Yaoqing Gao, and Jingling Xue. Selecting Context-Sensitivity Modularly for Accelerating Object-Sensitive Pointer Analysis, IEEE Transactions on Software Engineering (TSE'22)

Dongjie He, Jingbo Lu, and Jingling Xue. Context Debloating for Object-Sensitive Pointer Analysis, 36th IEEE/ACM International Conference on Automated Software Engineering (ASE'21)

Dongjie He, Jingbo Lu, Yaoqing Gao, and Jingling Xue. Accelerating Object-Sensitive Pointer Analysis by Exploiting Object Containment and Reachability, 35th European Conference on Object-Oriented Programming (ECOOP'21)

Jingbo Lu, Dongjie He, and Jingling Xue. Eagle: CFL-Reachability-based Precision-Preserving Acceleration of Object-Sensitive Pointer Analysis, ACM Transactions on Software Engineering and Methodology (TOSEM 2021)

Jingbo Lu and Jingling Xue. Precision-Preserving Yet Fast Object-Sensitive Pointer Analysis with Partial Context Sensitivity. ACM SIGPLAN Conference on Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA'19)

License

GPL v2.1