Schreiben von überprüfbar typsicherem Code
Als typsicherer Code wird Code bezeichnet, der nur auf genau definierte, zulässige Weise auf Typen zugreift. Bei typsicherem Code ist z. B. bei einem gültigen Objektverweis der Speicherzugriff an festen Offsets möglich, die tatsächlichen Feldmembern entsprechen. Wenn der Code jedoch auf den Speicher an beliebigen Offsets außerhalb des Gültigkeitsbereichs des Speichers zugreift, der zu den öffentlich verfügbar gemachten Feldern des Objekts gehört, ist er nicht typsicher.
Bei der JIT-Kompilierung wird eine Überprüfung vorgenommen, bei der Code untersucht und dessen Typsicherheit ermittelt wird. Code, bei dessen Überprüfung Typsicherheit festgestellt wird, wird als überprüfbar typsicherer Code bezeichnet. Aufgrund der Beschränkungen des Überprüfungsvorgangs oder des Compilers kann Code typsicher, jedoch nicht überprüfbar typsicher sein. Nicht alle Sprachen sind typsicher, und einige Sprachcompiler, z. B. Microsoft Visual C++, können keinen überprüfbar typsicheren verwalteten Code generieren. Ob der verwendete Sprachcompiler überprüfbar typsicheren Code generiert, können Sie der Dokumentation des Compilers entnehmen. Wenn Sie einen Sprachcompiler verwenden, der überprüfbar typsicheren Code nur bei Vermeidung bestimmter Sprachkonstrukte generiert, empfiehlt es sich, mit dem .NET Framework SDK-Tool PEVerify zu bestimmen, ob der Code überprüfbar typsicher ist.
Nicht überprüfbar typsicherer Code kann ausgeführt werden, wenn die Sicherheitsrichtlinien zulassen, dass der Code die Überprüfung umgeht. Da Typsicherheit ein wesentlicher Bestandteil der Isolation von Assemblys zur Laufzeit ist, kann Sicherheit nicht zuverlässig erzwungen werden, wenn die Regeln für die Typsicherheit durch Code verletzt werden. In der Standardeinstellung ist die Ausführung von nicht typsicherem Code nur zulässig, wenn er vom lokalen Computer stammt. Aus diesem Grunde muss mobiler Code typsicher sein.
Siehe auch
Referenz
Konzepte
Grundlagen der Codezugriffssicherheit
Kompilieren von MSIL in systemeigenen Code