Freigeben über


strict_gs_check

Dieses Pragma bietet eine verbesserte Sicherheitsüberprüfung.

#pragma strict_gs_check([push,] on ) 
#pragma strict_gs_check([push,] off ) 
#pragma strict_gs_check(pop)

Hinweise

Weist den Compiler an, einen zufällig ausgewählten Cookie im Funktionsstapel einzufügen, um verschiedene Kategorien stapelbasierten Pufferüberlaufs zu erkennen.Standardmäßig fügt die Compileroption /GS (Puffer-Sicherheitsüberprüfung) kein Cookie für alle Funktionen ein.Weitere Informationen finden Sie unter /GS (Puffer-Sicherheitsüberprüfung).

Sie müssen mit /GS (Puffer-Sicherheitsüberprüfung) kompilieren, um strict_gs_check zu aktivieren.

Verwenden Sie dieses Pragma in den Codemodulen, die den möglicherweise schädlichen Daten verfügbar gemacht werden.Dieses Pragma ist sehr aggressiv und wird auf Funktionen angewendet, die nicht diese Schutz benötigen, jedoch wird optimiert, um den Auswirkungen auf die Leistung der resultierenden Anwendung zu minimieren.

Auch wenn Sie das Pragma verwenden, sollten Sie bemühen, sicheren Code zu schreiben.Vergewissern Sie sich also, dass der Code keine Pufferüberläufe hat.strict_gs_check kann die Anwendung vor Pufferüberläufen schützen, die in Ihrem Code verbleiben.

Beispiel

Im folgenden Code tritt ein Pufferüberlauf auf, wenn wir ein Array zu einem lokalen Array kopieren.Wenn Sie diesen Code mit /GS kompiliert, wird kein Cookie in den Stapel eingefügt, da der Arraydatentyp ein Zeiger ist.Durch Hinzufügen des strict_gs_check-Pragmas wird das Stapel-Cookie in den Funktionsstapel gezwungen.

// pragma_strict_gs_check.cpp
// compile with: /c

#pragma strict_gs_check(on)

void ** ReverseArray(void **pData,
                     size_t cData)
{
    // *** This buffer is subject to being overrun!! ***
    void *pReversed[20];

    // Reverse the array into a temporary buffer
    for (size_t j = 0, i = cData; i ; --i, ++j)
        // *** Possible buffer overrun!! ***
            pReversed[j] = pData[i]; 

    // Copy temporary buffer back into input/output buffer
    for (size_t i = 0; i < cData ; ++i) 
        pData[i] = pReversed[i];

    return pData;
}

Siehe auch

Referenz

Pragma-Direktiven und das __Pragma-Schlüsselwort

/GS (Puffer-Sicherheitsüberprüfung)