safebuffers
Konkrétní společnosti Microsoft
Říká kompilátoru nelze vložit kontroly zabezpečení přetečení vyrovnávací paměti pro funkci.
__declspec( safebuffers )
Poznámky
/GS Volba kompilátoru způsobí, že kompilátor test přetečení vložením kontroly zabezpečení v zásobníku.Typy datových struktur, které jsou způsobilé pro kontroly zabezpečení jsou popsány v /GS (Kontrola zabezpečení vyrovnávací paměti).Další informace o zjišťování přetečení vyrovnávací paměti viz Kompilátor zabezpečení kontroly v hloubku na webu MSDN.
Externí analýzy nebo Přehled odborných ruční kódu aplikace může určit funkce je bezpečné z přetečení vyrovnávací paměti.V takovém případě můžete potlačit kontrol zabezpečení funkce použitím __declspec(safebuffers) klíčové funkce prohlášení.
Upozornění |
---|
Vyrovnávací kontroly zabezpečení poskytují důležité zabezpečení ochrany a mají zanedbatelný vliv na výkon.Doporučujeme proto, že je Nepotlačovat, s výjimkou ve vzácných případech, kdy výkon funkce je důležité se týkají a funkce je známa bezpečné. |
Vložené funkce
A primární funkci můžete použít inlining klíčové slovo vložit kopii sekundární funkce.Pokud __declspec(safebuffers) klíčové slovo je použita funkce, funkce je potlačena detekci přetečení vyrovnávací paměti.Však inlining vliv __declspec(safebuffers) klíčové slovo následujícími způsoby.
Předpokládejme, že /GS je zadán parametr kompilátoru pro obě funkce, ale určuje primární funkci __declspec(safebuffers) klíčové slovo.Datové struktury v sekundární funkce proveďte kontrol zabezpečení a funkce neskrývá těchto kontrol.V tomto případě:
Zadat __forceinline klíčové slovo sekundární funkci vynucení kompilátoru vložené, který fungovat bez ohledu na optimalizaci kompilátoru.
Protože je sekundární funkce zabezpečení kontrol, kontrol zabezpečení jsou také použity primární funkce přestože Určuje, __declspec(safebuffers) klíčové slovo.
Příklad
Následující kód ukazuje způsob použití __declspec(safebuffers) klíčové slovo.
// 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;
}
Konec konkrétní společnosti Microsoft