Condividi tramite


safebuffers

Sezione specifica Microsoft

Indica al compilatore di non inserire controlli di sicurezza sul sovraccarico del buffer per una funzione.

__declspec( safebuffers )

Note

L'opzione del compilatore /GS indica al compilatore di eseguire il test per i sovraccarichi 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 ulteriori informazioni sul rilevamento del sovraccarico del buffer, vedere Controlli di sicurezza del compilatore in dettaglio sul sito Web MSDN.

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 parola chiave __declspec(safebuffers) per la dichiarazione di funzione.

Avviso

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ò utilizzare una parola chiave inlining per inserire una copia di una funzione secondaria. L'applicazione della parola chiave __declspec(safebuffers) determina l'eliminazione del rilevamento del sovraccarico del buffer per tale funzione. Tuttavia, l'operazione inlining influisce sulla parola chiave __declspec(safebuffers) nei modi indicati di seguito.

Si supponga che l'opzione del compilatore /GS sia specificata per entrambe le funzioni, ma che la parola chiave __declspec(safebuffers) sia specificata per la funzione primaria. 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 sulla funzione secondaria per imporre al compilatore di rendere inline tale funzione indipendentemente dalle ottimizzazioni del compilatore.

  • Poiché la funzione secondaria è idonea per i controlli di sicurezza, sebbene sia specificata la parola chiave __declspec(safebuffers) i controlli vengono applicati anche alla funzione primaria.

Esempio

L'utilizzo della parola chiave __declspec(safebuffers) viene illustrato nell'esempio seguente.

// 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

Vedere anche

Riferimenti

__declspec

Parole chiave C++

inline, __inline, __forceinline

strict_gs_check