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