safebuffers
Spécifique à Microsoft
Indique au compilateur de ne pas insérer des vérifications de sécurité de dépassement de mémoire tampon pour une fonction.
__declspec( safebuffers )
Notes
L'option du compilateur pour /GS provoque le compilateur pour tester les dépassements de mémoire tampon en insérant des vérifications de sécurité sur la pile.Les structures de types de données qui sont habilitées aux vérifications de sécurité sont décrites dans /GS (Vérification de la sécurité de la mémoire tampon).Pour plus d'informations sur la détection de dépassement de mémoire tampon, consultez Compiler Security Checks In Depth sur le site Web MSDN.
Une révision du code manuel expert ou une analyse externe peut déterminer qu'une fonction est sûr d'un dépassement de mémoire tampon.Dans ce cas, vous pouvez supprimer des vérifications de sécurité pour une fonction en appliquant le mot clé d'declspec(safebuffers) de à la déclaration de fonction.
Attention |
---|
Les contrôles de sécurité de la mémoire tampon assurer la protection importante de sécurité et ont un impact négligeable sur les performances.Par conséquent, nous vous recommandons de ne supprimez pas, sauf dans les rares cas où la représentation d'une fonction est un problème critique et la fonction est réputée pour être sécurisée. |
Fonctions inline
Une fonction principale peut utiliser un mot clé de la fonctionnalité inline pour insérer une copie d'une fonction secondaire.si le mot clé d'declspec(safebuffers)de est appliqué à une fonction, la détection de dépassement de mémoire tampon est supprimée pour cette fonction.Toutefois, la fonctionnalité inline affecte le mot clé d'declspec(safebuffers)de plusieurs façons.
Supposons que l'option du compilateur pour /GS est spécifiée pour les deux fonctions, mais la fonction principale spécifie le mot clé d'declspec(safebuffers)de.Les structures de données dans la fonction secondaire rendent disponible pour les vérifications de sécurité, et la fonction ne supprime pas ces contrôles.Dans ce cas :
spécifiez le mot clé de __forceinline sur la fonction secondaire pour forcer le compilateur à inline qui fonctionnent indépendamment des optimisations du compilateur.
Étant donné que la fonction secondaire est habilitée aux vérifications de sécurité, les vérifications de sécurité sont également appliqués à la fonction principale bien qu'elle spécifie le mot clé d'declspec(safebuffers)de.
Exemple
Le code suivant indique comment utiliser le mot clé d'declspec(safebuffers)de.
// 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;
}
détail de FIN Microsoft