safebuffers
Microsoft-spezifisch
Weist den Compiler an, keine Pufferüberlauf-Sicherheitsüberprüfungen für eine Funktion einzufügen.
__declspec( safebuffers )
Hinweise
Die /GS-Compileroption bewirkt, dass der Compiler Pufferüberläufe testet, indem Sicherheitsüberprüfungen im Stapel eingefügt werden. Die Typen der Datenstrukturen, die für Sicherheitsüberprüfungen freigegeben sind, werden in /GS (Puffer-Sicherheitsüberprüfung) beschrieben. Weitere Informationen zur Pufferüberlauferkennung finden Sie unter Compiler-Sicherheitsüberprüfungen im Detail auf der MSDN-Website.
Eine fachmännische manuelle Codeüberprüfung oder externe Analyse kann bestimmten, 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 __declspec(safebuffers)-Schlüsselwort auf die Funktionsdeklaration anwenden.
Warnung
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. Allerdings wirkt sich das Inlining auf das __declspec(safebuffers) - Schlüsselwort in folgender Weise aus.
Angenommen, die /GS-Compileroption 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 gilt Folgendes:
Geben Sie das __forceinline-Schlüsselwort in der sekundären Funktion an, damit der Compiler diese Funktion unabhängig von den Compileroptimierungen inline ausführt.
Da die sekundäre Funktion für Sicherheitsüberprüfungen freigegeben ist, werden auch Sicherheitsüberprüfungen für die primäre Funktion durchgeführt, obwohl durch sie das __declspec(safebuffers) -Schlüsselwort angegeben wird.
Beispiel
Im folgenden Code wird die Verwendung des __declspec(safebuffers) -Schlüsselworts veranschaulicht.
// 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;
}
END Microsoft-spezifisch