safebuffers
Section spécifique à Microsoft
Indique au compilateur de ne pas insérer de vérifications de sécurité de dépassement de mémoire tampon pour une fonction.
Syntaxe
__declspec( safebuffers )
Notes
L’option du compilateur /GS entraîne le test du compilateur pour les dépassements de mémoire tampon en insérant des case activée de sécurité sur la pile. Les types de structures de données éligibles pour les case activée de sécurité sont décrits dans /GS (Contrôle de sécurité de la mémoire tampon) . Pour plus d’informations sur la détection de dépassement de mémoire tampon, consultez Fonctionnalités de sécurité dans MSVC.
Une révision manuelle du code par un expert ou une analyse externe peut déterminer qu'une fonction est protégée contre un dépassement de mémoire tampon. Dans ce cas, vous pouvez supprimer les case activée de sécurité d’une fonction en appliquant la __declspec(safebuffers)
mot clé à la déclaration de fonction.
Attention
Les vérifications de sécurité de la mémoire tampon assurent une protection importante et ont un impact négligeable sur les performances. Par conséquent, nous vous recommandons de ne pas les supprimer, sauf dans la rare éventualité où les performances d'une fonction est un problème critique et où la fonction est réputée pour être sécurisée.
Fonctions inline
Une fonction principale peut utiliser une mot clé d’incorporation pour insérer une copie d’une fonction secondaire. Si la mot clé est appliquée à une fonction, la __declspec(safebuffers)
détection de dépassement de mémoire tampon est supprimée pour cette fonction. Toutefois, l’incorporation affecte les __declspec(safebuffers)
mot clé de la manière suivante.
Supposons que l’option du compilateur /GS soit spécifiée pour les deux fonctions, mais que la fonction principale spécifie la __declspec(safebuffers)
mot clé. Les structures de données présentes dans la fonction secondaire lui permettent de faire l'objet de vérifications de sécurité, et la fonction ne supprime pas ces vérifications. Dans ce cas :
Spécifiez la __forceinline mot clé sur la fonction secondaire pour forcer le compilateur à inliner cette fonction indépendamment des optimisations du compilateur.
Étant donné que la fonction secondaire est éligible aux case activée de sécurité, les case activée de sécurité sont également appliquées à la fonction principale même si elle spécifie la
__declspec(safebuffers)
mot clé.
Exemple
Le code suivant montre comment utiliser le __declspec(safebuffers)
mot clé.
// 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;
}
FIN de la section spécifique à Microsoft
Voir aussi
__declspec
Mots clés
inline, __inline, __forceinline
strict_gs_check
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour