strict_gs_check
此杂注提供增强的安全检查。
#pragma strict_gs_check([push,] on )
#pragma strict_gs_check([push,] off )
#pragma strict_gs_check(pop)
备注
指示在函数堆栈中编译器插入随机 cookie 以帮助检测基于堆栈的缓冲区溢出的某些类别。 默认情况下,/GS(缓冲区安全检查)编译器选项不插入 Cookie 到任何函数。 有关更多信息,请参见/GS(缓冲区安全检查)。
启用 strict_gs_check,必须用 /GS (Buffer Security Check) 编译。
使用此说明在显示潜在有害的数据的代码模块。 此杂注非常积极的和适用于可能不需要此方法的功能,但是,优化使其对结果的应用程序的性能的影响。
即使您使用此杂注,应尽可能地写入安全代码。 即,确保您的编码没有缓冲区溢出。 strict_gs_check 可能防止在代码中一定存在的应用程序缓冲区溢出。
示例
在下面的编码中,将数组复制到局部数组中时,就会发生缓冲区溢出。 在使用编译 /GS 时的此代码,cookie 在堆栈未插入,因为数组数据类型是指针。 添加 strict_gs_check 杂注强制堆栈 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;
}