/sdl (Aktivieren zusätzlicher Sicherheitsüberprüfungen)

Aktiviert empfohlene SDL-Prüfungen (Security Development Lifecycle). Diese Überprüfungen ändern sicherheitsrelevante Warnungen in Fehler und legen zusätzliche features der sicheren Codegenerierung fest.

Syntax

/sdl[-]

Hinweise

/sdl ermöglicht eine Obermenge der geplanten Sicherheitsüberprüfungen, die von /GS und Außerkraftsetzungen /GS-bereitgestellt werden. Ist standardmäßig /sdl deaktiviert. /sdl- deaktiviert die zusätzlichen Sicherheitsprüfungen.

Überprüfungen zur Kompilierzeit

/sdl aktiviert diese Warnungen als Fehler:

Durch /sdl aktivierte Warnung Entsprechender Befehlszeilenschalter Beschreibung
C4146 /we4146 Ein unärer Subtraktionsoperator wurde auf einen vorzeichenlosen Typ angewendet, was zu einem Ergebnis ohne Vorzeichen führte.
C4308 /we4308 Eine negative integrale Konstante wurde in einen vorzeichenlosen Typ konvertiert, was zu einem möglicherweise bedeutungslosen Ergebnis führte.
C4532 /we4532 Die Verwendung von continue, breakoder goto Schlüsselwort (keyword) in einemfinally/__finally Block hat ein nicht definiertes Verhalten während einer abnormalen Beendigung.
C4533 /we4533 Der Code, der eine Variable initialisiert, wird nicht ausgeführt.
C4700 /we4700 Verwendung einer nicht initialisierten lokalen Variablen.
C4703 /we4703 Verwendung einer möglicherweise nicht initialisierten lokalen Zeigervariablen.
C4789 /we4789 Pufferüberlauf, wenn bestimmte CRT-Funktionen (C Run-Time) verwendet werden.
C4995 /we4995 Verwendung einer Funktion, die mit Pragma deprecatedgekennzeichnet ist.
C4996 /we4996 Verwendung einer Funktion, die als gekennzeichnet ist deprecated.

Laufzeitüberprüfungen

Wenn /sdl diese Option aktiviert ist, generiert der Compiler Code, der diese Überprüfungen zur Laufzeit durchführt:

  • Aktiviert den strengen Modus der /GS Laufzeitpufferüberlauferkennung, die dem Kompilieren mit #pragma strict_gs_check(push, on).

  • Führt die eingeschränkte Zeigerbereinigung durch. In Ausdrücken, die keine Ableitungen umfassen, und in Typen ohne benutzerdefinierte Destruktor werden Zeigerverweise nach einem Aufruf deleteauf eine ungültige Adresse festgelegt. Diese Bereinigung trägt dazu bei, die Wiederverwendung veralteter Zeigerbezüge zu verhindern.

  • Initialisiert Klassenmememlerzeiger. Initialisiert automatisch Klassenmber des Zeigertyps für nullptr die Objektinstanziierung (bevor der Konstruktor ausgeführt wird). Dadurch wird verhindert, dass nicht initialisierte Zeiger verwendet werden, die der Konstruktor nicht explizit initialisiert. Die compilergenerierte Memberpointerinitialisierung wird aufgerufen, solange:

    • Das Objekt wird nicht mithilfe einer benutzerdefinierten (benutzerdefinierten) Zugeordnet. operator new

    • Das Objekt wird nicht als Teil eines Arrays zugeordnet (z. B new A[x]. )

    • Die Klasse wird nicht verwaltet oder importiert.

    • Die Klasse verfügt über einen benutzerdefinierten Standardkonstruktor.

    Um von der compilergenerierten Klasseninitialisierungsfunktion initialisiert zu werden, muss ein Element ein Zeiger und keine Eigenschaft oder Konstante sein.

Weitere Informationen finden Sie unter Warnungen, /sdl und verbessern die Erkennung nicht initialisierter Variablen.

So legen Sie diese Compileroption in der Visual Studio-Entwicklungsumgebung fest

  1. Öffnen Sie das Dialogfeld Eigenschaftenseiten des Projekts. Weitere Informationen erhalten Sie unter Set C++ compiler and build properties in Visual Studio (Festlegen der Compiler- und Buildeigenschaften (C++) in Visual Studio).

  2. Navigieren Sie zur Eigenschaftenseite Konfigurationseigenschaften>C/C++>Allgemein.

  3. Legen Sie die SDL-Check-Eigenschaft mithilfe des Dropdown-Steuerelements der Eigenschaft fest. Wählen Sie "OK" aus, oder "Übernehmen", um Ihre Änderungen zu speichern.

Siehe auch

MSVC-Compileroptionen
Syntax für die MSVC-Compilerbefehlszeile