Tai-e v0.2.2 releases: easy-to-learn/use static analysis framework for Java
What is Tai-e?
Tai-e (Chinese: 太阿; pronunciation: [ˈtaɪə:]) is a new static analysis framework for Java (please see our technical report for details), which features arguably the “best” designs from both the novel ones we proposed and those of classic frameworks such as Soot, WALA, Doop, and SpotBugs. Tai-e is easy-to-learn, easy-to-use, efficient, and highly extensible, allowing you to easily develop new analyses on top of it.
Currently, Tai-e provides the following major analysis components (and more analyses are on the way):
- Powerful pointer analysis framework
- On-the-fly call graph construction
- Various classic and advanced techniques of heap abstraction and context sensitivity for pointer analysis
- Extensible analysis plugin system (allows to conveniently develop and add new analyses that interact with pointer analysis)
- Various fundamental/client/utility analyses
- Fundamental analyses, e.g., reflection analysis and exception analysis
- Modern language feature analyses, e.g., lambda and method reference analysis, invoke dynamic analysis
- Clients, e.g., configurable taint analysis (allowing to configure sources, sinks, and taint transfers)
- Utility tools like analysis timer, constraint checker (for debugging), and various graph dumpers
- Control/Data-flow analysis framework
- Control-flow graph construction
- Classic data-flow analyses, e.g., live variable analysis, constant propagation
- Your data-flow analyses
- A spotBugs-like bug detection system
- Bug detectors, e.g., null pointer detector, incorrect clone() detector
- Your bug detectors
Tai-e is developed in Java, and it can run on major operating systems including Windows, Linux, and macOS.
Changelog v0.2.2
New Features
- Add option
--app-class-path
. - Add option
--keep-results
. - Add option
--output-dir
. - Add option
-wc, --world-cache-mode
. - Add def-use analysis.
- Add dominator-finding algorithm.
- Add generics signature information for Class, Method, and Field.
- Include documentation source in the repository.
- Taint analysis
- Support taint source for arguments of method calls and method parameters.
- Support taint source for field loads.
- Support taint sanitization for method parameters.
- Dump taint flow graph.
- Support loading multiple taint configuration files.
- Support taint transfer between variables and instance fields/array elements.
- Support call-site mode.
- Pointer analysis
- Support adding entry points of the program to analyze.
- Support analysis time limit.
- Support propagation for values of primitive types.
- Support hybrid inference-based and log-based reflection analysis.
- Add Solar reflection analysis (TOSEM’19).
- Support annotation-based invoke handler registration.
- Support dumping points-to set in YAML format.
Breaking Changes
- Option and configuration changes
- Change All
dump
related options. Previously, mostdump
options require users to specify a path to dump file; now, Tai-e uses fixed path for dump file (the file name is fully fixed, and users can still change dump directory via option--output-dir
), so that users only need to specifytrue
orfalse
for alldump
options. - Rename analysis
class-dumper
toir-dumper
. - Pointer analysis
- Replace
merge-string-constants
bydistinguish-string-constants
. - Replace
action
bydump
andexpected-file
.
- Replace
- Taint analysis
- Require to add
kind
to source configurations. Previously, the taint analysis only supports one kind of sources, i.e., result of method call. Now, we support more kinds of sources, including argument or result of method call (kind: call
), and method parameter (kind: param
) , so users need to specify kind of each source. Please see an example.
- Require to add
- Change All
- API changes
- Change
pascal.taie.analysis.pta.core.heap.HeapModel.getMockObj(String,...)
toHeapModel.getMockObj(Descriptor,...)
. - Change APIs of
pascal.util.graph.Edge
and its subclasses. - Change return type of
Exp.getUses()
toSet<RValue>
. - Change return type of
Stmt.getUses()
toSet<RValue>
.
- Change
Install & Use
Copyright (C) 2022 pascal-lab