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 /GS
infogas ingen cookie i stacken eftersom matrisdatatypen är en pekare. Om du lägger till strict_gs_check
pragma 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)