Maple-IR ist ein industrielles IR-basierter statischer Analyse-Framework für Java-Bytecode. Derzeit implementiert es SSA-Form-basierte Analyse sowie Konstruktion und Zerstörung von Bytecode nach IR. Der Toolchain nimmt Bytecode -Eingang an, hebt ihn auf SSA IR, verwandelt den IR und findet dann wieder in Bytecode zusammen. Dies geschieht durch symbolische Ausführung jeder Methode beim Simulieren des Stapels, ähnlich wie die Hexenstrahlen von Binär-Ninja oder IDA Pro. Die intraprocedurale Datenflussanalyse wird vollständig implementiert, und Optimierungen wie konstanter Falten und Kopienpropagation werden ebenfalls implementiert. Ein CFG -Graphviz -Exporteur ist ebenfalls verfügbar. Beispiele finden Sie unten.
Maple-IR ist nicht in aktiver Entwicklung. Es ist auf unbestimmte Zeit in der Pause, obwohl Codebeiträge willkommen sind. Bitte stellen Sie Fragen, Kommentare und Ausgaben zum Problem Tracker ein.
Maple-IR in seiner aktuellen Form ist noch nicht produktionsbereit, obwohl es mit wenig Anstrengungen erfolgen kann.
Wenn Sie Maple-IR verwenden, lassen Sie es uns bitte wissen! Wir würden gerne über coole Projekte hören, für die Sie sie verwenden.

"Es ist wie LLVM, aber schlimmer."
Hier ist die Graphviz-Visualisierung für den optimierten, zerstörten (Post-SSA) IR für den folgenden Code:
void test130 () {
int x = 5 ;
int y = 10 ;
do {
try {
trap ( x , y );
y = x ;
trap ( x , y );
y = 123 ;
} catch ( RuntimeException e ) {
do {
trap ( x , y );
int z = y ;
trap ( x , y );
y = x ;
trap ( x , y );
x = z ;
trap ( x , y );
} while (! p ());
}
} while ( p ());
System . out . println ( x );
System . out . println ( y );
}
Hier ist eine schlechte Funktion in optimierter SSA -Form, die aus dem Farbtöner entnommen wurde:
Die SSA -Zerstörung wird unter Verwendung der Methoden von Sreedhar et al. und Boissinot et al. Der Boissinot Destructor ist derzeit der Standard -Destruktor. Die SSA-Konstruktion wird auf der Grundlage eines schnellen 1-Pass-linearen Scan-Algorithmus implementiert, der lose auf der Methode von Cytron et al. Unter Verwendung von Dominanzgrenzen basiert. Weitere Informationen finden Sie in ssagenpass.java. Die Zerstörung der Bytecode ist in Java aufgrund von Ausnahmebereichen schwierig. Darüber hinaus ist die Linearisierung des Kontrollflussdiagramms (CFG) auf einfache Weise aufgrund der Schleifennistung schwierig. Die Linearisierung erfolgt durch rekursives Anwenden von Tarjans übernachten Komponentenalgorithmus. Ausnahmebellen für jede Methode werden basierend auf der Struktur des Kontrollflussdiagramms verworfen und regeneriert. Weitere Informationen finden Sie unter ControlFlowgraphdumper.
Weitere Informationen finden Sie im Whitepaper.
javac im Sinn gestaltet. Dies bedeutet, dass zum Beispiel finally die Blöcke korrekt verarbeitet werden, wenn auch nicht ordentlich. Zu bauen:
mvn clean compile test package
Der Build produziert zwei Gläser mit Abhängigkeiten ( mapleir-full.jar ) und einen ohne ( mapleir-full-with-deps.jar ). Sie können jedes Modul auch einzeln verwenden.
Dann optional:
mvn install
Sie können auch Maple-IR auf Jitpack erhalten.
Kontakt: Bitte geben Sie ein Problem ein, ich werde mein Bestes tun, um so schnell wie möglich zu antworten.
Das Teilen wird zu gemeldetem und niedergeschlagen (Segen)
Maple-IR ist unter der GPLV3 lizenziert. Weitere Informationen finden Sie hier.
Copyright (C) 2022 Bibl und RCX