Articles of non sicuro

Un valore del campo statico di tipo puntatore viene visualizzato come zero 0x0 dal debugger mentre in realtà ha un valore valido

Ho trovato questo comportamento mentre provavo ad accedere al valore del campo statico di una struct con type uint* Durante il debug, la finestra watch mostra il valore statico del campo StaticBitMask come zero, ma in realtà (e come previsto) è un puntatore valido e Console.WriteLine() stampa, come si può vedere nell’output della console di […]

Chiamando una funzione C ++ da C # – pila sbilanciata

Ho una funzione C ++ non gestita con la seguente firma: int function(char* param, int ret) Sto provando a chiamarlo da C #: unsafe delegate int MyFunc(char* param, int ret); … int Module = LoadLibrary(“fullpathToUnamanagedDll”); IntPtr pProc = GetProcAddress(Module, “functionName”); MyFunc func = (MyFunc)System.Runtime.InteropServices.Marshal.GetDelegateForFunctionPointer(pProc, typeof(MyFunc)); unsafe { char* param = null; int ret = 0; […]

Qual è la funzione effettiva dell’impostazione del progetto C # “Consenti codice non sicuro”

Mi chiedevo se l’impostazione del progetto C # “Consenti codice non sicuro” si applica solo al codice C # non sicuro nel progetto stesso, o è necessario impostare questa opzione quando si collega in una DLL C ++ nativa? Che dire del collegamento in una DLL gestita che si collega a una DLL nativa? Cosa […]

Posso sembrare che msbuild crei blocchi di codice non sicuri

msbuild non sembra permettermi di build blocchi unsafe anche se il mio .csproj specifica: … true il mio comando di build è: msbuild myProject.sln /p:Configuration=Release /p:Platform=”Any CPU” /t:Clean,Build

Marshal.PtrToStringUni () vs new String ()?

Supponiamo di avere un puntatore di tipo char * nella stringa unicode e conosco la lunghezza: char* _unmanagedStr; int _unmanagedStrLength; e ho 2 modi per convertirlo in .NET string: Marshal.PtrToStringUni((IntPtr)_unmanagedStr, _unmanagedStrLength); e new string(_unmanagedStr, 0, _unmanagedStrLength); Nei miei test, entrambe le chiamate mi danno esattamente lo stesso risultato, ma la new string() è uguale a […]

Il codice non sicuro ha qualche effetto sul codice di sicurezza?

A quanto ho capito, contrassegnare un metodo come non sicuro disabiliterà alcuni dei controlli CLR su quel codice, ma questo ha qualche effetto sul resto del sistema che è sicuro, a parte il fatto che la DLL / EXE non può essere eseguita in un ambiente non affidabile. In particolare, Sono controlli di sicurezza che […]

È necessario qui GC.KeepAlive oppure posso contare su persone del luogo e argomenti che mantengono vivo un object?

Ho un sacco di metodi che prendono WriteableBitmap di WPF e leggono direttamente dal suo BackBuffer , usando codice non sicuro. Non è del tutto chiaro se dovrei usare GC.KeepAlive ogni volta che faccio qualcosa del genere: int MyMethod(WriteableBitmap bmp) { return DoUnsafeWork(bmp.BackBuffer); } Da un lato, rimane un riferimento a bmp sullo stack MyMethod […]

Utilità di bool * in C #

Posso usare bool* in qualsiasi tipo di modo significativo. Come posso convertire bool* in un byte per esempio, o memorizzare bool* in un byte Il mio objective è di gestire la mia memoria in un mio progetto, le specifiche non sono importanti, solo qualcosa che id piace fare. Ora vorrei essere in grado di memorizzare […]

L’operazione aritmetica ha comportato un overflow in C # non sicuro

sfondo Abbiamo utilizzato un codice copiato testualmente da “Concurrent Programming on Windows” (pagina 149) di Joe Duffy in produzione per oltre un anno. Il codice (sotto) viene utilizzato nella nostra applicazione web Asp.Net per verificare se c’è abbastanza spazio nello stack. Il nostro sito consente agli utenti di creare script delle proprie pagine Web e […]

GCHandleType.Pinned è simile all’utilizzo della parola chiave “fixed”?

Sto sperimentando con IntPtr in codice “sicuro”, confrontandolo con il modo in cui le cose sono fatte in modalità “non sicura”. GCHandleType.Pinned è simile all’utilizzo di “fixed” in modalità non sicura? GCHandle pinnedArray = GCHandle.Alloc(byteArray, GCHandleType.Pinned); IntPtr pointer = pinnedArray.AddrOfPinnedObject(); //do your stuff pinnedArray.Free(); vs byte[] buffer = new byte[255]; fixed (byte* p = buffer) […]