分享方式:


strict_gs_check pragma

這 pragma 可提供增強的安全性檢查。

語法

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

備註

指示編譯器在函式堆疊中隨機插入 Cookie,協助偵測部分堆疊型緩衝區滿溢分類。 根據預設,編譯 /GS 程序選項不會為所有函式插入 Cookie。 如需詳細資訊,請參閱/GS(緩衝區安全性檢查)。

使用 /GS 編譯 以啟用 strict_gs_check

在公開給潛在有害數據的程式代碼模組中使用此選項 pragma 。 strict_gs_check 是積極的 pragma,而且會套用至可能不需要此防禦的函式,但已優化以將其對所產生應用程式效能的影響降到最低。

即使您使用此 pragma,您也應該努力撰寫安全的程序代碼。 也就是說,請確定您的程式代碼沒有緩衝區滿溢。 strict_gs_check 可能會保護您的應用程式免於在程式碼中保留的緩衝區滿溢。

範例

在此範例中,當我們將陣列複製到本機陣列時,就會發生緩衝區滿溢。 當您使用 /GS編譯此程式代碼時,不會在堆疊中插入任何 Cookie,因為數位資料類型是指針。 strict_gs_checkpragma將強制堆疊 Cookie 新增至函式堆疊。

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

另請參閱

Pragma 指示詞和 __pragma_Pragma 關鍵詞
/GS (緩衝區安全性檢查)