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