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
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für