safebuffers

Microsoft-spezifisch

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

Syntax

__declspec( safebuffers )

Hinweise

Die Option /GS-Compiler führt dazu, dass der Compiler auf Pufferüberläufe getestet wird, indem Sicherheitsüberprüfungen im Stapel eingefügt werden. Die Arten von Datenstrukturen, die für Sicherheitsüberprüfungen berechtigt sind, werden in /GS (Puffersicherheitsprüfung) beschrieben. Weitere Informationen zur Pufferüberlauferkennung 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 Sicherheitsüberprüfungen für eine Funktion unterdrücken, indem Sie das Schlüsselwort auf die __declspec(safebuffers) 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 ein Inliningwort verwenden, um eine Kopie einer sekundären Funktion einzufügen. Wenn das Schlüsselwort auf eine Funktion angewendet wird, wird die __declspec(safebuffers) Pufferüberlauferkennung für diese Funktion unterdrückt. Das Inlining wirkt sich jedoch auf das Schlüsselwort auf folgende __declspec(safebuffers) Weise aus.

Angenommen, die Option /GS-Compiler wird für beide Funktionen angegeben, aber die primäre Funktion gibt das __declspec(safebuffers) Schlüsselwort 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 das schlüsselwort __forceinline auf der sekundären 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 Sicherheitsüberprüfungen auch auf die primäre Funktion angewendet, obwohl sie das __declspec(safebuffers) Schlüsselwort angibt.

Beispiel

Im folgenden Code wird gezeigt, wie das __declspec(safebuffers) Schlüsselwort verwendet wird.

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