2009-04-01 8 views
20

Mis à part le fait que le code lui-même peut accéder directement à la mémoire. Quelles sont les autres implications de l'utilisation de l'indicateur de compilation "/ unsafe" et du mot clé "fixed"? Existe-t-il des effets secondaires liés à la signature de code et au déploiement de mon fichier .exe (mon application est un ordinateur de bureau uniquement)?Quelles sont les implications de l'utilisation de code dangereux

(Ce n'est pas de savoir si oui ou non je devrais faire cela, le pourquoi est couvert dans ma question here)

Répondre

6

code non protégé n'est pas vérifiable, vous devez être conscient de cela. Dans un environnement de confiance totale, ce n'est pas un gros problème, mais si vous avez d'autres environnements qui ont un ensemble d'autorisations plus restreint, cela peut vous toucher ici.

12

Vous pouvez mettre les implications dans deux compartiments.

La première est de savoir comment cela affecte votre environnement d'application. L'utilisation d'un code non sécurisé nécessite que votre assembly soit exécuté dans un environnement d'approbation complet. Il n'est pas possible de s'exécuter dans un environnement restreint tel que certains paramètres de sécurité Cliquez une fois. La raison en est que le code dangereux empêche le CLR d'assurer la sécurité du type. Cliquez une fois si sans restrictions de sécurité ne devrait pas avoir de problème.

La seconde est ce que cela signifie pour la façon dont vous codez. L'utilisation d'un code non sécurisé implique généralement l'utilisation de pointeurs et, en particulier, leur utilisation pour effectuer un marshaling avancé via PInvoke. Cependant, il n'y a rien de fondamentalement mauvais avec l'une ou l'autre de ces actions. Il faut simplement beaucoup plus de compréhension du CLR et du marshalling que le code "safe". L'épinglage d'objets est un excellent exemple de connaissances dont vous devez avoir une bonne connaissance avant de commencer à utiliser ces fonctionnalités.

2

Pour ajouter à la référence de Jared objet épingler ...

Lorsque vous utilisez des pointeurs pour accéder à la mémoire directement en C#, vous êtes vulnérable au déplacement d'un objet CLR autour de la mémoire lors de l'exécution. Cela signifie que votre pointeur peut pointer soudainement sur la mauvaise section de la mémoire. Le mot-clé Fixed épingle l'objet en mémoire afin que ce problème puisse être évité.

Questions connexes