2009-04-01 10 views
20

Abgesehen von der Tatsache, dass der Code selbst auf Speicher direkt zugreifen kann. Welche anderen Auswirkungen haben die Verwendung des Compilerflags "/ unsafe" und des Schlüsselworts "fixed"? Gibt es irgendwelche Auswirkungen auf Code-Signierung und Bereitstellung meiner EXE (meine App ist nur Desktop)?Was sind die Auswirkungen der Verwendung von unsicheren Code

(Es geht nicht darum, ob ich dies tun sollte, die warum in meiner Frage here bedeckt ist) ist

Antwort

6

Unsafe Code nicht überprüfbar, so dass Sie sich bewusst sein müssen. In einer Full-Trust-Umgebung ist das keine große Sache, aber wenn Sie andere Umgebungen mit eingeschränkterer Berechtigungsgruppe haben, kann sich dies auf Sie auswirken.

12

Sie können die Auswirkungen in zwei Eimer setzen.

Das erste ist, wie es Ihre Anwendungsumgebung beeinflusst. Wenn Sie unsicheren Code verwenden, muss Ihre Assembly in einer Umgebung mit vollständiger Vertrauenswürdigkeit ausgeführt werden. Es ist nicht möglich, in einer eingeschränkten Umgebung wie bestimmten Click Once Sicherheitseinstellungen zu laufen. Der Grund dafür ist, dass unsicherer Code verhindert, dass die CLR die Typsicherheit gewährleistet. Klicken Sie einmal ohne Sicherheitseinschränkungen sollte kein Problem haben.

Die zweite ist, was es für die Art bedeutet, wie Sie programmieren. Bei der Verwendung von unsicherem Code werden in der Regel Zeiger verwendet und insbesondere dazu verwendet, das erweiterte Marshalling über PInvoke durchzuführen. Mit diesen beiden Aktionen ist jedoch nichts an sich falsch. Es erfordert nur ein wesentlich besseres Verständnis der CLR und des Marshalling als der "sichere" Code. Object Pinning ist ein großartiges Beispiel für Kenntnisse, die Sie vor der Verwendung dieser Funktionen fest im Griff haben sollten.

2

zu Jareds Referenz Hinzufügen Objekt Pinning ...

Wenn Zeiger Speicher zuzugreifen direkt in C#, sind Sie auf die CLR verwundbar ein Objekt um im Speicher zur Laufzeit zu bewegen. Dies bedeutet, dass Ihr Zeiger plötzlich auf den falschen Speicherbereich zeigen kann. Das Schlüsselwort Fixed fixiert das Objekt im Speicher, sodass dieses Problem vermieden werden kann.

Verwandte Themen