safebuffers
Блок, относящийся только к системам Майкрософт
Указывает компилятору не вставлять проверки безопасности на переполнение буфера для функции.
Синтаксис
__declspec( safebuffers )
Замечания
Параметр компилятора /GS вызывает тестирование компилятора для переполнения буфера путем вставки проверка безопасности в стек. Типы структур данных, подходящих для проверка безопасности, описаны в разделе /GS (проверка безопасности буфера). Дополнительные сведения об обнаружении переполнения буфера см. в разделе "Функции безопасности" в MSVC.
Экспертная проверка кода вручную или внешний анализ могут показать, что функция безопасна с точки зрения переполнения буфера. В этом случае можно отключить проверка безопасности для функции, применив __declspec(safebuffers)
ключевое слово к объявлению функции.
Внимание
Проверки безопасности буфера — это важное средство обеспечения безопасности, которое практически не сказывается производительности. Поэтому отключать их не рекомендуется, кроме тех редких случаев, когда производительность функции исключительно важна, а сама функция заведомо безопасна.
Встраиваемые функции
Основная функция может использовать встраивание ключевое слово для вставки копии вторичной функции. __declspec(safebuffers)
Если ключевое слово применяется к функции, обнаружение переполнения буфера подавляется для этой функции. Однако встраивание влияет на __declspec(safebuffers)
ключевое слово следующим образом.
Предположим, что параметр компилятора /GS указан для обеих функций, но основная функция задает __declspec(safebuffers)
ключевое слово. Структуры данных в дополнительной функции делают ее законным объектом для проверок безопасности, поэтому такие проверки в ней не отключаются. В данном случае:
Укажите __forceinline ключевое слово вторичной функции, чтобы принудительно включить в нее функцию независимо от оптимизации компилятора.
Так как вторичная функция имеет право на проверка безопасности, проверка безопасности также применяются к основной функции, даже если она указывает
__declspec(safebuffers)
ключевое слово.
Пример
В следующем коде показано, как использовать __declspec(safebuffers)
ключевое слово.
// compile with: /c /GS
typedef struct {
int x[20];
} BUFFER;
static int checkBuffers() {
BUFFER cb;
// Use the buffer...
return 0;
};
static __declspec(safebuffers)
int noCheckBuffers() {
BUFFER ncb;
// Use the buffer...
return 0;
}
int wmain() {
checkBuffers();
noCheckBuffers();
return 0;
}
Завершение блока, относящегося только к системам Майкрософт
См. также
__declspec
Ключевые слова
inline, __inline, __forceinline
strict_gs_check
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по