✨Neuigkeiten
- Version v0.5.4:
- Tai-e wird mit einem neuen Frontend ausgeliefert, das eine schnellere und zuverlässigere Konvertierung von Java-Programmen in Tai-e-IR ermöglicht.
- Die Analyse von Android-Apps wird durch ein PacDroid-betriebenes Plugin unterstützt, das in die Pointer-Analyse integriert ist.
- Spring-DI- und WEC-Analyse wird durch das Spring-Analyse-Plugin unterstützt.
- Unser Paper "Two Approaches to Fast Bytecode Frontend for Static Analysis" wurde auf der OOPSLA'25 angenommen. Dieses Paper stellt das neue Bytecode-Frontend von Tai-e vor, das deutlich schneller und zuverlässiger ist als bestehende Frontends.
- Unser Paper "Pointer Analysis for Database-Backed Applications" wurde auf der PLDI'25 angenommen. Dieses Paper beschreibt eine Ende-zu-Ende-Pointer-Analyse für Java-Datenbankanwendungen, die auf Tai-e aufbaut.
- Unser Paper "PacDroid: A Pointer-Analysis-Centric Framework for Security Vulnerabilities in Android Apps" wurde auf der ICSE'25 angenommen. Diese Arbeit demonstriert Tai-e's neue Fähigkeiten in der Android-Analyse und bietet einen einfachen, aber effektiven Ansatz für die Sicherheitsanalyse von Apps. Diese Arbeit erhielt den Best Artifact Award🏅.
- Unser Paper "Bridge the Islands: Pointer Analysis for Microservice Systems" wurde auf der ISSTA'25 angenommen. Dieses Paper beschreibt die erste Pointer-Analyse für Java-Mikroservicesysteme, die auf Tai-e aufbaut.
- Unser Paper "Interactive Cross-Language Pointer Analysis for Resolving Native Code in Java Programs" wurde auf der ICSE'25 angenommen. Dies ist die erste sprachübergreifende Pointer-Analyse zwischen Java und C. Diese Arbeit gewann den Distinguished Paper Award🏅.
- Unser Paper "Context Sensitivity without Context: A Cut-Shortcut Approach to Fast and Precise Pointer Analysis" wurde auf der PLDI'23 angenommen. Dies ist die erste veröffentlichte Forschungsarbeit, die auf Tai-e aufbaut.
- Unser Paper "Tai-e: A Developer-Friendly Static Analysis Framework for Java by Harnessing the Good Designs of Classics" wurde auf der ISSTA'23 angenommen. Dieses Paper beschreibt die Entwürfe der Hauptkomponenten von Tai-e.
Inhaltsverzeichnis
Was ist Tai-e?
Tai-e (chinesisch: 太阿; Aussprache: [ˈtaɪə:]) ist ein neues statisches Analyseframework für Java (siehe dazu unser ISSTA 2023 Paper), das wohl die "besten" Entwürfe sowohl aus den von uns vorgeschlagenen neuartigen als auch aus denen klassischer Frameworks wie Soot, WALA, Doop und SpotBugs vereint. Tai-e ist leicht zu erlernen, einfach zu bedienen, effizient und hochgradig erweiterbar, sodass Sie problemlos neue Analysen darauf aufbauen können.
Derzeit bietet Tai-e die folgenden Hauptanalysekomponenten (und weitere Analysen sind in Arbeit):
- Leistungsstarkes Pointer-Analyse-Framework
- On-the-fly-Kallgraphenkonstruktion
- Verschiedene klassische und fortgeschrittene Techniken der Heap-Abstraktion und Kontextsensitivität für die Pointer-Analyse
- Erweiterbares Analyse-Plugin-System (ermöglicht die bequeme Entwicklung und Integration neuer Analysen, die mit der Pointer-Analyse interagieren)
- Konfigurierbare Sicherheitsanalyse
- Taint-Analyse, die die Konfiguration von Quellen, Senken, Taint-Transfers und Sanitizern ermöglicht
- Erkennung verschiedener Informationslecks und Injection-Schwachstellen
- Verschiedene Abwägungen zwischen Präzision und Effizienz (profitieren vom Pointer-Analyse-Framework)
- Verschiedene grundlegende/Hilfsanalysen
- Grundlegende Analysen, z.B. Reflexionsanalyse und Ausnahmebehandlungsanalyse
- Analysen moderner Sprachfeatures, z.B. Lambda- und Methodenreferenzanalyse und
invokedynamic-Analyse
- Hilfsprogramme wie Analysetimer, Constraint-Checker (zum Debuggen) und verschiedene Graph-Dumper
- Kontroll-/Datenfluss-Analyse-Framework
- Kontrollflussgraph-Konstruktion
- Klassische Datenflussanalysen, z.B. Lebendige-Variablen-Analyse, Konstantenpropagation
- Ihre Datenflussanalysen
- SpotBugs-ähnliches Fehlererkennungssystem
- Fehlerdetektoren, z.B. Nullzeigerdetektor, falscher
clone()-Detektor
- Ihre Fehlerdetektoren
Tai-e wird in Java entwickelt und kann auf gängigen Betriebssystemen wie Windows, Linux und macOS ausgeführt werden.
Als Höflichkeit gegenüber den Entwicklern erwarten wir, dass Sie in Ihrer Forschungsarbeit das Paper aus der ISSTA 2023, das das Tai-e-Framework beschreibt, zitieren:
Tian Tan and Yue Li. 2023.
Tai-e: A Developer-Friendly Static Analysis Framework for Java by Harnessing the Good Designs of Classics.
In Proceedings of the 32nd ACM SIGSOFT International Symposium on Software Testing and Analysis (ISSTA '23), July 17–21, 2023, Seattle, WA, USA (pdf, bibtex).
Wie erhalte ich ein ausführbares Tai-e?
Die empfohlene Methode ist das Herunterladen des Distributions-ZIPs von GitHub Releases. Das ZIP enthält Tai-e, alle Laufzeitabhängigkeiten, die Offline-Dokumentation sowie Startskripte für Windows, Linux und macOS.
Alternativ können Sie das aktuellste Tai-e selbst aus dem Quellcode erstellen. Dies kann einfach über Gradle erfolgen (stellen Sie sicher, dass Java 17 (oder höher) auf Ihrem System verfügbar ist):
./gradlew distZip
Das Distributions-ZIP wird in tai-e/build/distributions/ erstellt. Nach dem Entpacken führen Sie Tai-e über das Startskript aus:
# auf Linux/macOS
./tai-e-<version>/bin/tai-e -h
# auf Windows
.\tai-e-<version>\bin\tai-e.bat -h
Aus Kompatibilitätsgründen mit älteren Versionen und Skripten bietet Tai-e weiterhin ein altes All-in-One-JAR:
./gradlew fatJar
java -jar build/tai-e-all-<version>.jar -h
Wie binde ich Tai-e in Ihr Projekt ein?
Tai-e ist als eigenständiges Werkzeug konzipiert, Sie haben aber auch die Möglichkeit, es als Abhängigkeit in Ihr Projekt einzubinden. Es ist auf Maven-Repositories verfügbar, sodass Sie es einfach mit Build-Tools wie Gradle und Maven in Ihre Java-Projekte integrieren können. Wir pflegen sowohl stabile als auch aktuelle Versionen von Tai-e; hier sind die entsprechenden Koordinaten in Gradle- und Maven-Skriptformaten:
Stabile Version
Für Gradle:
dependencies {
implementation("net.pascal-lab:tai-e:0.5.4")
}
Für Maven: