Udostępnij za pośrednictwem


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;
}

Zobacz też

Informacje

Dyrektywy pragma i słowo kluczowe __Pragma

/GS (Sprawdzanie zabezpieczeń bufora)