strict_gs_check pragma

Dies pragma bietet eine verbesserte Sicherheitsüberprüfung.

Syntax

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

Hinweise

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

Kompilieren sie mithilfe /GS der Aktivierung strict_gs_check.

Verwenden Sie dies pragma in Codemodulen, die potenziell schädlichen Daten ausgesetzt sind. strict_gs_check ist ein aggressiver pragma, und wird auf Funktionen angewendet, die diese Verteidigung möglicherweise nicht benötigen, aber optimiert ist, um seine Auswirkungen auf die Leistung der resultierenden Anwendung zu minimieren.

Auch wenn Sie dies pragmaverwenden, sollten Sie sich bemühen, sicheren Code zu schreiben. Stellen Sie daher sicher, dass der Code keine Pufferüberläufe aufweist. strict_gs_checkkann Ihre Anwendung vor Pufferüberläufen schützen, die in Ihrem Code erneut ausgeführt werden Standard.

Beispiel

In diesem Beispiel tritt ein Pufferüberlauf auf, wenn ein Array in ein lokales Array kopiert wird. Wenn Sie diesen Code mit /GSkompilieren, wird kein Cookie in den Stapel eingefügt, da der Arraydatentyp ein Zeiger ist. Hinzufügen der Kräfte des strict_gs_checkpragma Stapelcookies in den Funktionsstapel.

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

Pragma-Direktiven und die __pragma und _Pragma Schlüsselwort (keyword)
/GS (Puffersicherheitsprüfung)