strict_gs_check
Ta dyrektywa zapewnia, sprawdzanie zwiększonych zabezpieczeń.
#pragma strict_gs_check([push,] on )
#pragma strict_gs_check([push,] off )
#pragma strict_gs_check(pop)
Uwagi
Nakazuje kompilatorowi wstawianie losowego pliku cookie na stosie funkcji, aby ułatwić wykrycie niektórych kategorii przepełnienia buforu na podstawie stosu.Domyślnie opcja kompilatora /GS (sprawdzanie zabezpieczeń buforu) nie wstawia pliku cookie dla wszystkich funkcji.Aby uzyskać więcej informacji, zobacz /GS (Sprawdzanie zabezpieczeń bufora).
Należy skompilować z /GS (sprawdzanie zabezpieczeń buforu), aby umożliwić strict_gs_check.
Należy użyć tej pragmy w modułach kodu, które są poddane działaniu potencjalnie niebezpiecznych danych.Ta dyrektywa jest bardzo agresywna i jest stosowana do funkcji, które mogą być niepotrzebne w obronie, ale są zoptymalizowane w celu zminimalizowana wpływu na wydajność aplikacji wynikowej.
Nawet jeśli używasz tej pragmy, powinieneś dążyć do pisania bezpiecznego kodu.Należy upewnić się ze kod nie przekroczenia buforu. strict_gs_check może chronić aplikację przed przekroczeniami buforu, które pozostają w kodzie.
Przykład
W poniższym kodzie przepełnienie buforu występuje, podczas kopiowania tablicy do lokalnej tablicy.Podczas kompilowania kodu z /GS, plik cookie nie jest wstawiany na stosie, ponieważ typem danych tablicy jest wskaźnik.Dodanie pragmy strict_gs_check wymusza stos plików cookie wewnątrz stosu funkcji.
// 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;
}