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.For a pointer analysis framework that works for C and C++, we refer to SVF.
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:
- kc: k-callsite-sensitive pointer analysis (kCFA).
- ko: k-object-sensitive pointer analysis (kOBJ).
- kt: k-type-sensitive pointer analysis (kTYPE).
- kh: hybrid k-object-sensitive pointer analysis.
- B-2o: BEAN-guided 2-object-sensitive pointer analysis.
- D-2o: Data-driven 2-object-sensitive pointer analysis.
- M-ko: MAHJONG-guided k-object-sensitive pointer analysis.
- E-ko: EAGLE-guided k-object-sensitive pointer analysis.
- T-ko: TURNER-guided k-object-sensitive pointer analysis.
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.
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, 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)
Jingbo Lu, Dongjie He, and Jingling Xue Selective Context-Sensitivity for k-CFA with CFL-Reachability, 28th International Static Analysis Symposium (SAS'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)