• 10/02/2020
  • Чтение занимает 2 мин

В этой статье

Включает рекомендованные проверки жизненного цикла разработки безопасности (SDL).Enables recommended Security Development Lifecycle (SDL) checks. Эти проверки изменяют связанные с безопасностью предупреждения в ошибки и устанавливают дополнительные функции создания безопасного кода.These checks change security-relevant warnings into errors, and set additional secure code-generation features.

СинтаксисSyntax

/sdl[]/sdl[]

/SDL включает надмножество базовых проверок безопасности, предоставляемых /GS и переопределений /GS- ./sdl enables a superset of the baseline security checks provided by /GS and overrides /GS-. По умолчанию параметр /sdl имеет значение OFF.By default, /sdl is off. /sdl- отключает дополнительные проверки безопасности./sdl- disables the additional security checks.

Проверки времени компиляцииCompile-time Checks

/sdl включает эти предупреждения как ошибки:/sdl enables these warnings as errors:

Включаемые/sdl предупрежденияWarning enabled by /sdlЭквивалентный параметр командной строкиEquivalent command-line switchОписаниеDescription
C4146C4146/we4146/we4146Унарный оператор “минус” был применен к беззнаковому типу, что приведет к получению результата без знака.A unary minus operator was applied to an unsigned type, resulting in an unsigned result.
C4308C4308/we4308/we4308Отрицательная целая константа преобразуется в беззнаковый тип, что, вероятно, приведет к получению бессмысленного результата.A negative integral constant converted to unsigned type, resulting in a possibly meaningless result.
C4532C4532/we4532/we4532Использование continue break ключевых слов,, или goto в __finally / finally блоке имеет неопределенное поведение во время аварийного завершения.Use of continue, break, or goto keywords in a __finally/finally block has undefined behavior during abnormal termination.
C4533C4533/we4533/we4533Код инициализации переменной не выполняется.Code initializing a variable will not be executed.
C4700C4700/we4700/we4700Используется неинициализированная локальная переменная.Use of an uninitialized local variable.
C4703C4703/we4703/we4703Используется потенциально неинициализированная локальная переменная-указатель.Use of a potentially uninitialized local pointer variable.
C4789C4789/we4789/we4789Переполнение буфера при использовании определенных функций среды выполнения C (CRT).Buffer overrun when specific C run-time (CRT) functions are used.
C4995C4995/we4995/we4995Использование функции, помеченной директивой pragma deprecated .Use of a function marked with pragma deprecated.
C4996C4996/we4996/we4996Использование функции, помеченной как deprecated .Use of a function marked as deprecated.

Проверки во время выполненияRuntime checks

Если /sdl включен, компилятор создает код, выполняющий эти проверки во время выполнения:When /sdl is enabled, the compiler generates code that does these checks at run time:

  • Включает режим /GS обнаружения переполнения буфера во время выполнения, эквивалентный компиляции с #pragma strict_gs_check(push, on) .Enables the strict mode of /GS run-time buffer overrun detection, equivalent to compiling with #pragma strict_gs_check(push, on).

  • Ограничена очистка указателя.Does limited pointer sanitization. В выражениях, не затрагивающих разыменование и в типах, не имеющих пользовательских деструкторов, ссылки на указатели устанавливаются в недопустимый адрес после вызова delete .In expressions that don’t involve dereferences and in types that have no user-defined destructor, pointer references are set to a non-valid address after a call to delete. Такая очистка помогает предотвратить повторное использование устаревших ссылок на указатели.This sanitization helps to prevent the reuse of stale pointer references.

  • Инициализирует указатели членов класса.Initializes class member pointers. Автоматически инициализирует члены класса типа указателя до nullptr создания экземпляра объекта (перед запуском конструктора).Automatically initializes class members of pointer type to nullptr on object instantiation (before the constructor runs). Это помогает предотвратить использование неинициализированных указателей, которые конструктор не инициализирует явным образом.It helps prevent the use of uninitialized pointers that the constructor doesn’t explicitly initialize. Инициализация указателя члена, созданного компилятором, вызывается при условии, что:The compiler-generated member pointer initialization is called as long as:

    • Объект не выделяется с помощью пользовательского (определенного пользователем) operator newThe object isn’t allocated using a custom (user defined) operator new

    • Объект не выделяется как часть массива (например, new A[x] )The object isn’t allocated as part of an array (for example new A[x])

    • Класс не управляется или не импортируетсяThe class isn’t managed or imported

    • Класс имеет определенный пользователем конструктор по умолчанию.The class has a user-defined default constructor.

    Для инициализации с помощью созданной компилятором функции инициализации класса элемент должен быть указателем, а не свойством или константой.To be initialized by the compiler-generated class initialization function, a member must be a pointer, and not a property or constant.

Дополнительные сведения см. в статьях предупреждения,/SDL и улучшение обнаружения неинициализированных переменных.For more information, see Warnings, /sdl, and improving uninitialized variable detection.

Установка данного параметра компилятора в среде разработки Visual StudioTo set this compiler option in the Visual Studio development environment

  1. Откройте диалоговое окно Страницы свойств проекта.Open the project’s Property Pages dialog box. Подробнее см. в статье Настройка компилятора C++ и свойства сборки в Visual Studio.For details, see Set C++ compiler and build properties in Visual Studio.

  2. Перейдите на страницу свойств Свойства конфигурации > C/C++ > Общие.Select the Configuration Properties > C/C++ > General property page.

  3. Задайте свойство проверки SDL с помощью раскрывающегося списка свойств.Set the SDL checks property by using the property drop-down control. Нажмите кнопку ОК или Применить , чтобы сохранить изменения.Choose OK or Apply to save your changes.

См. также разделSee also

Параметры компилятора MSVCMSVC Compiler Options
Синтаксис командной строки компилятора КОМПИЛЯТОРОМ MSVCMSVC Compiler Command-Line Syntax