2009-04-01 11 views
20

A parte il fatto che il codice stesso può accedere direttamente alla memoria. Quali sono le altre implicazioni dell'uso del flag del compilatore "/ non sicuro" e della parola chiave "fixed"? Ci sono effetti a catena legati alla firma del codice e alla distribuzione del mio .exe (la mia app è solo desktop)?Quali sono le implicazioni dell'uso di codice non sicuro

(Non si tratta di se o non dovrei fare questo, il motivo per cui è coperto nella mia interrogazione here)

risposta

6

codice unsafe non è verificabile, quindi bisogna essere consapevoli di questo. In un ambiente con Full Trust, non è un grosso problema, ma se hai altri ambienti con un set di autorizzazioni più limitato, questo potrebbe avere un impatto su di te.

12

È possibile inserire le implicazioni in due intervalli.

Il primo è come influenza l'ambiente dell'applicazione. L'utilizzo di codice non sicuro richiede che l'assembly venga eseguito in un ambiente di trust completo. Non è possibile eseguire in un ambiente limitato come determinate impostazioni di sicurezza di Click Once. Il motivo è che il codice non sicuro impedisce al CLR di garantire la sicurezza del tipo. Fare clic una volta anche se senza restrizioni di sicurezza non dovrebbe avere un problema.

Il secondo è ciò che significa per il modo in cui si codifica. L'utilizzo di codice non sicuro implica in genere l'uso di puntatori e, in particolare, il loro utilizzo per eseguire il marshalling avanzato tramite PInvoke. Non c'è niente di intrinsecamente sbagliato in nessuna di queste azioni. Richiede solo una comprensione significativamente maggiore del CLR e del marshalling di quanto non faccia il codice "sicuro". Il blocco degli oggetti è un ottimo esempio di conoscenza di cui dovresti avere una solida conoscenza prima di iniziare a utilizzare queste funzionalità.

2

Per aggiungere al riferimento di Jared di opporsi pinning ...

Quando si utilizza puntatori per accedere alla memoria direttamente in C#, si sono vulnerabili alla CLR lo spostamento di un oggetto attorno in memoria in fase di esecuzione. Ciò significa che il tuo puntatore potrebbe improvvisamente puntare alla sezione di memoria sbagliata. La parola chiave Fixed attaccherà l'oggetto in memoria in modo che questo problema possa essere evitato.

Problemi correlati