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 eines 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 Codemodulen, die potenziell schädlichen Daten ausgesetzt sind. Dieses Pragma ist sehr aggressiv und wird auf Funktionen angewendet, die einen solchen Schutz möglicherweise nicht benötigen. Es wird jedoch optimiert, um die Auswirkung auf die Leistung der resultierenden Anwendung zu minimieren.
Auch wenn Sie das Pragma verwenden, sollten Sie sich bemühen, sicheren Code zu schreiben. Überprüfen Sie daher, dass der Code keine Pufferüberläufe hat. strict_gs_check kann die Anwendung vor Pufferüberläufen schützen, die im Code verbleiben.
Beispiel
Im folgenden Code tritt ein Pufferüberlauf auf, wenn wir ein Array in ein lokales Array kopieren. Wenn Sie diesen Code mit /GS kompilieren, wird kein Cookie in den Stapel eingefügt, da der Arraydatentyp ein Zeiger ist. Durch Hinzufügen des strict_gs_check-Pragmas wird das Stapelcookie 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;
}