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_checkiç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 /GSderlediğinizde, dizi veri türü bir işaretçi olduğundan yığına hiçbir tanımlama bilgisi eklenmez. öğesinin strict_gs_checkpragma 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)