Delen via


strict_gs_check pragma

Deze pragma biedt verbeterde beveiligingscontrole.

Syntaxis

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

Opmerkingen

Hiermee geeft u de compiler de opdracht om een willekeurige cookie in de functiestack in te voegen om bepaalde categorieƫn stack-gebaseerde bufferoverschrijding te detecteren. De optie /GS compiler voegt standaard geen cookie in voor alle functies. Zie /GS (Bufferbeveiligingscontrole)voor meer informatie.

Compileer met behulp van /GS om strict_gs_checkin te schakelen.

Gebruik deze pragma in codemodules die worden blootgesteld aan mogelijk schadelijke gegevens. strict_gs_check is een agressieve pragmaen wordt toegepast op functies die deze verdediging mogelijk niet nodig hebben, maar is geoptimaliseerd om het effect ervan op de prestaties van de resulterende toepassing te minimaliseren.

Zelfs als u deze pragmagebruikt, moet u ernaar streven om beveiligde code te schrijven. Zorg er dus voor dat uw code geen bufferoverschrijdingen heeft. strict_gs_check uw toepassing mogelijk beschermt tegen bufferoverschrijdingen die wel in uw code blijven.

Voorbeeld

In dit voorbeeld treedt een bufferoverschrijding op wanneer we een matrix naar een lokale matrix kopiƫren. Wanneer u deze code compileert met /GS, wordt er geen cookie ingevoegd in de stack, omdat het gegevenstype matrix een aanwijzer is. Door de strict_gs_checkpragma toe te voegen, wordt de stack-cookie in de functiestack geplaatst.

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

Zie ook

Pragma-instructies en de __pragma en _Pragma trefwoorden
(bufferbeveiligingscontrole)