safebuffers
Sezione specifica Microsoft
Indica al compilatore di non inserire controlli di sicurezza sul sovraccarico del buffer per una funzione.
Sintassi
__declspec( safebuffers )
Osservazioni:
L'opzione del compilatore /GS fa sì che il compilatore verifichi l'overrun del buffer inserendo i controlli di sicurezza nello stack. I tipi di strutture di dati idonei per i controlli di sicurezza sono descritti in /GS (Controllo sicurezza buffer). Per altre informazioni sul rilevamento dell'overrun del buffer, vedere Funzionalità di sicurezza in MSVC.
Una revisione del codice manuale esperta o un'analisi esterna potrebbe determinare che una funzione è protetta da un sovraccarico del buffer. In tal caso, è possibile eliminare i controlli di sicurezza per una funzione applicando la __declspec(safebuffers)
parola chiave alla dichiarazione di funzione.
Attenzione
I controlli di sicurezza del buffer sono importanti per la protezione e hanno effetto trascurabile sulle prestazioni. Di conseguenza, è consigliabile non eliminarli, tranne nel raro caso in cui le prestazioni di una funzione siano un problema critico e la sicurezza della funzione sia nota.
Funzioni inline
Una funzione primaria può usare una parola chiave inlining per inserire una copia di una funzione secondaria. Se la __declspec(safebuffers)
parola chiave viene applicata a una funzione, il rilevamento dell'overrun del buffer viene eliminato per tale funzione. Tuttavia, l'inlining influisce sulla __declspec(safebuffers)
parola chiave nei modi seguenti.
Si supponga che l'opzione del compilatore /GS sia specificata per entrambe le funzioni, ma la funzione primaria specifica la __declspec(safebuffers)
parola chiave . Le strutture dei dati nella funzione secondaria la rendono idonea per i controlli di sicurezza e la funzione non elimina tali controlli. In questo caso:
Specificare la parola chiave __forceinline nella funzione secondaria per forzare il compilatore a inline a tale funzione indipendentemente dalle ottimizzazioni del compilatore.
Poiché la funzione secondaria è idonea per i controlli di sicurezza, i controlli di sicurezza vengono applicati anche alla funzione primaria anche se specifica la
__declspec(safebuffers)
parola chiave .
Esempio
Il codice seguente illustra come usare la __declspec(safebuffers)
parola chiave .
// compile with: /c /GS
typedef struct {
int x[20];
} BUFFER;
static int checkBuffers() {
BUFFER cb;
// Use the buffer...
return 0;
};
static __declspec(safebuffers)
int noCheckBuffers() {
BUFFER ncb;
// Use the buffer...
return 0;
}
int wmain() {
checkBuffers();
noCheckBuffers();
return 0;
}
Fine sezione specifica Microsoft
Vedi anche
__declspec
Parole chiave
inline, __inline, __forceinline
strict_gs_check
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per