safebuffers

Microsoft-spezifisch

Weist den Compiler an, keine Pufferüberlauf-Sicherheitsüberprüfungen für eine Funktion einzufügen.

Syntax

__declspec( safebuffers )

Hinweise

Die /GS-Compileroption bewirkt, dass der Compiler auf Pufferüberläufe testet, indem Sicherheitsprüfungen in den Stapel eingefügt werden. Die Typen von Datenstrukturen, die für Sicherheitsüberprüfungen berechtigt sind, werden in /GS (Puffersicherheitsprüfung) beschrieben. Weitere Informationen zur Erkennung von Pufferüberläufen finden Sie unter Sicherheitsfeatures in MSVC.

Ein fachmännischer manueller Code Review oder eine fachmännische manuelle externe Analyse kann bestimmen, dass eine Funktion vor einem Pufferüberlauf sicher ist. In diesem Fall können Sie Sicherheitsprüfungen für eine Funktion unterdrücken, indem Sie die __declspec(safebuffers) Schlüsselwort (keyword) auf die Funktionsdeklaration anwenden.

Achtung

Puffer-Sicherheitsüberprüfungen bieten wichtige Sicherheit und haben eine geringfügige Auswirkung auf die Leistung. Daher empfiehlt es sich, sie nicht zu unterdrücken, außer in dem seltenen Fall, in dem die Leistung einer Funktion ein wichtiger Aspekt ist und die Funktion bekanntermaßen sicher ist.

Inlinefunktionen

Eine primäre Funktion kann eine Inlining-Schlüsselwort (keyword) verwenden, um eine Kopie einer sekundären Funktion einzufügen. Wenn die Schlüsselwort (keyword) auf eine Funktion angewendet wird, wird die __declspec(safebuffers) Pufferüberlauferkennung für diese Funktion unterdrückt. Die Inlineierung wirkt sich jedoch auf die __declspec(safebuffers) Schlüsselwort (keyword) auf folgende Weise aus.

Angenommen, die /GS-Compileroption ist für beide Funktionen angegeben, aber die primäre Funktion gibt die __declspec(safebuffers) Schlüsselwort (keyword) an. Die Datenstrukturen in der sekundären Funktion machen sie besonders geeignet für Sicherheitsüberprüfungen, und die Funktion unterdrückt diese Überprüfungen nicht. In diesem Fall:

  • Geben Sie die __forceinline Schlüsselwort (keyword) für die sekundäre Funktion an, um den Compiler unabhängig von Compileroptimierungen inline zu erzwingen.

  • Da die sekundäre Funktion für Sicherheitsüberprüfungen berechtigt ist, werden sicherheitsrelevante Prüfungen auch auf die primäre Funktion angewendet, obwohl sie die __declspec(safebuffers) Schlüsselwort (keyword) angibt.

Beispiel

Der folgende Code veranschaulicht die Verwendung des __declspec(safebuffers) Schlüsselwort (keyword).

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

Ende Microsoft-spezifisch

Siehe auch

__declspec
Schlüsselwörter
inline, __inline, __forceinline
strict_gs_check