Core Concepts
LeJit ist ein Template-basiertes Framework zum Testen von Java Just-in-Time (JIT) Compilern. LeJit extrahiert automatisch Template-Programme aus vorhandenen Java-Code, indem es Ausdrücke in Löcher umwandelt und notwendigen Glue-Code generiert, um die extrahierten Templates ausführbar zu machen. Die Ausführung der generierten Template-Programme erzeugt konkrete Programme, die als Eingaben für Java-JIT-Compiler-Tests verwendet werden.
Abstract
LeJit besteht aus fünf Hauptphasen:
Sammlung: LeJit sammelt eine Liste von Methoden aus dem gegebenen Code und erhält Tests, die zur Erstellung sinnvoller Eingaben für diese Methoden verwendet werden können.
Extraktion: Für jede Methode in der Liste behandelt LeJit sie als Einstiegsmethode, wählt die zu verwendenden Eingaben aus und extrahiert ein Template aus der Java-Klasse, die die Methode definiert.
Generierung: LeJit führt jedes extrahierte Template mit den ausgewählten Eingaben für die Einstiegsmethode aus, um konkrete Java-Programme zu erzeugen.
Testen: LeJit führt die generierten Programme über die Einstiegsmethode mit denselben ausgewählten Eingaben unter Verwendung verschiedener Java-JIT-Compiler für Differentialtests aus.
Bereinigung: LeJit bereinigt die erkannten Abstürze und/oder Inkonsistenzen, um Falschpositive zu minimieren, und meldet dann erkannte Fehler.
LeJit verwendet zwei Ansätze zur Sammlung von Einstiegsmethoden und zum Erhalt von Codesequenzen, die Argumente für Einstiegsmethoden erstellen können: einen testbasierten Ansatz und einen poolbasierten Ansatz. LeJit erweitert auch JAttack, um die Generierungs- und Testphasen zu unterstützen.
LeJit wurde verwendet, um eine Reihe von beliebten Java-JIT-Compilern zu testen, wobei 15 Fehler entdeckt wurden, darunter 11 zuvor unbekannte Fehler, einschließlich zweier CVEs (Common Vulnerabilities and Exposures). Alle Fehler wurden von Compiler-Entwicklern bestätigt.
Stats
"Wenn str == null, dann buffer = new char[CAPACITY]"
"Wenn size <= -1838784853, dann return this"
"Wenn len > _lim1 && buf[size] != 'Z', dann pos++"
"Wenn pos <= _lim2 || buf[size - 1312433786] > '0', dann len--"
Quotes
Keine relevanten Zitate gefunden.