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