.NET & Typsicherheit 22.04.2020, 14:15 Uhr

Ist der .NET JIT Compiler typsicher?

C# ist typsicher. .NET führt aber gar keinen C#-Code aus, sondern C# wird in CIL kompiliert. Darin kann der Code nachträglich verändert werden. Damit könnte die Typsicherheit allerdings Geschichte sein.
(Quelle: tooslowexception.com)
Jeder weiß, dass C# eine stark typisierte Sprache ist und eine falsche Verwendung von Typen dort nicht möglich ist. Entwickler können also darauf vertrauen, dass der C#-Kompiler Roslyn keinen fehlerhaften Typsicherheitscode erzeugt. Was passiert aber, hat sich Entwickler Konrad Kokosa gefragt, wenn er einen Code mit Typfehler, der sich in C# geschrieben nicht kompilieren lässt, in die Common Intermediate Language (CIL) umschreibt und dabei C# und dessen Compiler komplett weglässt?
Der nicht typsichere Code (mit einer Zuweisung von "Test".Length an die Methode WriteLine, also den Integer 4 an eine Methode, die einen String erwartet) lässt sich zunächst einmal per ILASM-Werkzeug fehlerfrei assemblieren, da es sich um syntaktisch korrektes CIL handelt. Und da ILASM kein Compiler ist, führt es selbst keine Typprüfungen durch. Am Ende hatte er eine Assembly-Datei mit einem "stinkenden" CIL darin.
Die nächste Frage ist naheliegend: Was wird passieren, wenn man versucht solchen Code auszuführen? Wird die .NET-Laufzeit irgendwie den CIL-Code dieser Methoden verifizieren?
Gesagt, getan. Kokosa hat den Test gestartet und siehe da, das Programm wurde einfach ohne Fehler ausgeführt. Weder der Just in Time Compiler (JIT) noch irgend ein anderer Teil der .NET-Laufzeit haben die Typsicherheit des Codes untersucht. Die Methode WriteLine gab den Wert 4 aus, gefolgt von der Zahl 0 in einer neuen Zeile.
Warum ist das Ergebnis 0? Was kann man daraus lernen? Was kann man tun, damit man seinem Code voll vertrauen kann, auch wenn er nach dem Kompilieren noch durch Tools verändert worden ist? Diese Fragen beantwortet Kokosa in seinem lesenswerten Beitrag unter https://tooslowexception.com/net-jit-compiler-is-not-type-safe/.


Das könnte Sie auch interessieren