Die TU Darmstadt hat mit Wasabi ein dynamisches Analyse-Framework für Webassembly geschrieben. Die unter MIT-Lizenz stehende Software erlaubt es Entwicklern, Analysecode in Wasm-Binärprogramme einzubauen.
Solche Analysen helfen dabei, zur Laufzeit Fehler und Sicherheitslücken sowie Performance-Engpässe in Programmen aufzuspüren. Dabei kommen auch Fehler und Probleme zum Vorschein, die bei statischen Analysen unter Umständen unter den Tisch fallen.
Eine Webseite zum Projekt beschreibt recht minutiös, was Wasabi tut und wie Entwickler es in der Praxis einsetzen. Grob besteht die Arbeit darin, ein Webassembly-Binary mit zusätzlichen Analysefunktionen auszustatten und diese modifizierte Version dann laufen zu lassen.
Analyse-Hooks einbauen
Die Analysefunktionen schreibt der Programmierer in einem ersten Schritt gegen das High-Level-API von Wasabi und legt diese Hooks in einer Javascript-Datei ab (etwa “analysis.js”). Dann lässt er das Wasabi-Tool gegen die Wasm-Datei laufen, was zwei neue Dateien erzeugt: Erstens eine instrumentierte Wasm-Datei, zweitens eine Javascript-Datei (“wasabi.js”), die Daten zum Programm und Klebecode enthält, der das Programm mit der Analyse verbindet.
Die beiden Javascript-Dateien bindet der Entwickler dann über die HTML-Datei in die Wasm-Webseite ein und ersetzt auch das Original-Wasm-Binary durch die modifizierte Version. Bei einem Aufruf der Webseite kommen nun die anfangs erzeugten Analyse-Hooks zum Einsatz. Die senden ihre Resultate an die Konsole, an Websockets oder speichern sie in einer Indexed DB.
Wer das Ganze ausprobieren möchte, findet auf der Webseite zum Projekt auch Democode. Daneben gibt es ein Paper zu Wasabi auf Arxiv, das von Daniel Lehmann und Michael Pradel von der TU Darmstadt stammt. Es beschreibt vorwiegend die Konzepte hinter Wasabi, wobei Lehmann gegenüber dem Linux-Magazin auf das noch frühe Stadium der Software verwies. Der Wasabi-Quellcode wartet wiederum auf Github, an der Dokumentation arbeiten die Entwickler noch.
[Update]: Feedback vom Entwickler eingearbeitet.




