Dela via


strict_gs_check pragma

Den här pragma ger förbättrad säkerhetskontroll.

Syntax

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

Anmärkningar

Instruerar kompilatorn att infoga en slumpmässig cookie i funktionsstacken för att identifiera vissa kategorier av stackbaserad buffertöverskridning. Som standard infogar inte /GS kompilatoralternativet en cookie för alla funktioner. Mer information finns i /GS (buffertsäkerhetskontroll).

Kompilera med hjälp av /GS för att aktivera strict_gs_check.

Använd den här pragma i kodmoduler som exponeras för potentiellt skadliga data. strict_gs_check är en aggressiv pragmaoch tillämpas på funktioner som kanske inte behöver det här skyddet, men som är optimerade för att minimera dess effekt på det resulterande programmets prestanda.

Även om du använder den här pragmabör du sträva efter att skriva säker kod. Se alltså till att koden inte har några buffertöverskridanden. strict_gs_check kan skydda ditt program från buffertöverskridanden som finns kvar i koden.

Exempel

I det här exemplet sker en buffertöverskridning när vi kopierar en matris till en lokal matris. När du kompilerar den här koden med /GSinfogas ingen cookie i stacken eftersom matrisdatatypen är en pekare. Om du lägger till strict_gs_checkpragma tvingar du stackcookien till funktionsstacken.

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

Se även

Pragma-direktiv och nyckelorden __pragma och _Pragma
/GS (buffertsäkerhetskontroll)