strict_gs_check pragma

Zapewnia to pragma ulepszone sprawdzanie zabezpieczeń.

Składnia

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

Uwagi

Instruuje kompilator, aby wstawić losowy plik cookie w stosie funkcji, aby ułatwić wykrywanie niektórych kategorii przepełnienia buforu opartego na stosie. Domyślnie /GS opcja kompilatora nie wstawia pliku cookie dla wszystkich funkcji. Aby uzyskać więcej informacji, zobacz /GS (Sprawdzanie zabezpieczeń buforu).

Skompiluj za pomocą polecenia /GS , aby włączyć funkcję strict_gs_check.

Użyj tej funkcji pragma w modułach kodu, które są narażone na potencjalnie szkodliwe dane. strict_gs_check jest agresywny pragmai jest stosowany do funkcji, które mogą nie potrzebować tej obrony, ale jest zoptymalizowane pod kątem zminimalizowania wpływu na wydajność wynikowej aplikacji.

Nawet jeśli używasz tego elementu pragma, należy dążyć do pisania bezpiecznego kodu. Oznacza to, że kod nie ma przepełnień buforu. strict_gs_check może chronić aplikację przed przekroczeniami buforu, które pozostają w kodzie.

Przykład

W tym przykładzie występuje przepełnienie buforu podczas kopiowania tablicy do tablicy lokalnej. Podczas kompilowania tego kodu za pomocą /GSpolecenia plik cookie nie jest wstawiany do stosu, ponieważ typ danych tablicy jest wskaźnikiem. Dodanie pliku strict_gs_checkpragma cookie stosu do 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ż

Dyrektywy Pragma i __pragma słowa kluczowe i _Pragma
/GS (Sprawdzanie zabezpieczeń buforu)