共用方式為


strict_gs_check

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

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

備註

在函式堆疊指示編譯器插入任意 Cookie 有助於偵測堆疊式緩衝區滿溢有些分類。 根據預設, /GS (緩衝區安全性檢查) 編譯器選項不會插入任何函式的 Cookie。 如需詳細資訊,請參閱/GS (緩衝區安全性檢查)

您必須以 /GS 編譯 (緩衝區安全性檢查) 啟用 strict_gs_check。

使用這個標記會公開在潛在危害資料的程式碼模組。 這個 pragma 非常主動及套用至可能不需要這個防禦的函式,不過,最佳化最小化至產生的應用程式效能的影響。

即使您使用這個標記,您應該努力撰寫安全程式碼。 也請確定您的程式碼沒有緩衝區滿溢。 strict_gs_check 可能保護應用程式免於維持程式碼的緩衝區滿溢。

範例

在下列程式碼中,當我們複製陣列至本機陣列時,緩衝區滿溢隨即出現。 當您使用 /GS 編譯時執行這個程式碼, Cookie 在堆疊未插入,,因為陣列資料型別是指標。 將 strict_gs_check pragma 強制堆疊 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 關鍵字

/GS (緩衝區安全性檢查)