strict_gs_check
pragma
Bu pragma , gelişmiş güvenlik denetimi sağlar.
Sözdizimi
#pragma strict_gs_check(
[push,
] {on
|off
})
#pragma strict_gs_check( pop )
Açıklamalar
Yığın tabanlı arabellek taşmasının bazı kategorilerini algılamaya yardımcı olması için, derleyiciye işlev yığınına rasgele bir tanımlama bilgisi eklemesini bildirir. Varsayılan olarak, /GS
derleyici seçeneği tüm işlevler için tanımlama bilgisi eklemez. Daha fazla bilgi için bkz /GS
. (Arabellek Güvenlik Denetimi).
'yi etkinleştirmek strict_gs_check
için kullanarak /GS
derleyin.
Bunu pragma zararlı olabilecek verilere açık kod modüllerinde kullanın. strict_gs_check
agresif pragmabir ve bu savunmaya gerek duymayabilecek işlevlere uygulanır, ancak sonuçta elde edilen uygulamanın performansı üzerindeki etkisini en aza indirmek için iyileştirilir.
Bunu pragmakullansanız bile, güvenli kod yazmaya çabalamalısınız. Başka bir ifadeyle, kodunuzun arabellek taşması olmadığından emin olun. strict_gs_check
uygulamanızı kodunuzda kalan arabellek taşmalarına karşı koruyabilir.
Örnek
Bu örnekte, bir diziyi yerel bir diziye kopyaladığımız zaman arabellek taşması oluşur. Bu kodu ile /GS
derlediğinizde, dizi veri türü bir işaretçi olduğundan yığına hiçbir tanımlama bilgisi eklenmez. öğesinin strict_gs_check
pragma eklenmesi, yığın tanımlama bilgisini işlev yığınına zorlar.
// 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;
}
Ayrıca bkz.
Pragma yönergeleri ve __pragma
ve _Pragma
anahtar sözcükleri
/GS
(Arabellek güvenlik denetimi)