safebuffers
Microsoft-spezifisch
Weist den Compiler an, keine Pufferüberlauf-Sicherheitsüberprüfungen für eine Funktion einzufügen.
Syntax
__declspec( safebuffers )
Hinweise
Die Compileroption /GS bewirkt, dass der Compiler auf Pufferüberläufe testet, indem sicherheitsrelevante Überprüfungen im Stapel eingefügt werden. Die Typen von Datenstrukturen, die für Sicherheitsüberprüfungen geeignet sind, werden in /GS (Puffersicherheitsprüfung) beschrieben. Weitere Informationen zur Erkennung von Pufferüberlauf 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 sicherheitsrelevante Überprüfungen für eine Funktion unterdrücken, indem Sie das __declspec(safebuffers)
Schlüsselwort 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 ein Inlining-Schlüsselwort verwenden, um eine Kopie einer sekundären Funktion einzufügen. Wenn das __declspec(safebuffers)
Schlüsselwort auf eine Funktion angewendet wird, wird die Pufferüberlauferkennung für diese Funktion unterdrückt. Das Inlining wirkt sich jedoch wie folgt auf das __declspec(safebuffers)
Schlüsselwort aus.
Angenommen, die Compileroption /GS ist 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 für die sekundäre Funktion an, um zu erzwingen, dass der Compiler diese Funktion unabhängig von Compileroptimierungen inline einbezieht.
Da die sekundäre Funktion für Sicherheitsüberprüfungen geeignet ist, werden Sicherheitsüberprüfungen auch auf die primäre Funktion angewendet, obwohl sie das
__declspec(safebuffers)
Schlüsselwort angibt.
Beispiel
Der folgende Code zeigt die Verwendung des Schlüsselworts __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;
}
Ende Microsoft-spezifisch
Siehe auch
__declspec
Schlüsselwörter
inline, __inline, __forceinline
strict_gs_check