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