Bonjour,
J'aimerai savoir si la fonction memmove_s est utilisée par l'un d'entre vous et si c'est le cas en utilisant quel compilateur?? (j'ai regardé dans gcc il n'y est pas)
Merci
Version imprimable
Bonjour,
J'aimerai savoir si la fonction memmove_s est utilisée par l'un d'entre vous et si c'est le cas en utilisant quel compilateur?? (j'ai regardé dans gcc il n'y est pas)
Merci
Ces fonctions (strcpy_s, sprintf_s) sont des extensions Microsoft à la librairie standard du C. Ce sont des améliorations, en termes de sécurité au niveau du code, des fonctions standards strcpy, sprintf, ... qui ne permettent pas par exemple de spécifier la taille du buffer qui va recevoir les données. Personnellement, j'utilise ces fonctions mais pas dans des programmes Open Source ;).
Les fonctions de la librairie standard permettent d'écrire des programmes solides, si on sait bien se servir d'elles. Par exemple, utiliser _snprintf (C99) au lieu de sprintf, strncpy au lieu de strcpy, etc. Au pire, implémenter ses propres fonctions.
Oui je suis bien d'accord avec toi, par contre il existe desfonctions pour lesquels il existe toujours une problématique , la fonction que je recherche par exemple, memmove( ) comment tu veux la sécuriser sans réécrire le code source de memmove_s?? l'accès à la mémoire sous C est toujours problématique...
je parlais de memmove..
standard etc...
En quoi elle te pose problème au niveau sécurité ??
:king: c'est ça.Citation:
Envoyé par Thierry Chappuis
Parce qu'elle n'offre aucun moyen de spécifier la taille du buffer de destination.Citation:
Envoyé par souviron34
Les fonctions utilisant la mémoire sous C ont toutes été déprécies en faveur des fonctions xxx_s pour empêcher les buffer overflow. Un buffer Overflow permet à un malatentioné de prendre le contrôle de la machine en passant par des droits root..et il y a beaucoup d'exemples sur le net qui expliquent ce genre d'attaque
Tout d'abord, il n'y a pas d'implémentation de fonction dans un fichier .h. Un fichier d'en-tête ne contient que des déclarations de fonctions, des définitions de types, de macros, etc. L'implémentation c'est dans les fichiers .c. Ensuite, comme je l'ai déja dit plus haut ces fonctions sont des extensions de Microsoft à la librairie du C, elles ne sont pas tenues à être connues de tous les compilateurs. Et enfin, si tu veux des fonctions "sécurisées" tu n'as qu'à implémenter les tiennes. Mais jusqu'où va cette sécurité en fait? Si le programme est bien écrit, il n'y a pas vraiment de différence à utiliser memcpy ou memcpy_s ...
Parle-t-on de la même fonction?
Il est clair que si on lui balance n'importe quoi comme paramètres, on aura des petits soucis.Citation:
#include <string.h>
void *memmove (void *dest, const void *src, size_t n);
DESCRIPTION
La fonction memmove() copie n octets de la zone de mémoire src vers la zone dest. Les deux zones peuvent se chevaucher.
8O
et quand tu fais un strcpy , strcat, ou n'importe quelle fonction ???
En C en général il faut savoir ce qu'on fait...
Comme dirait Emmanuel, c'est pas pour les frileux...
Si tu fais une copie ou un mouvement mémoire sans savoir dans quoi tu le places, too bad...
Les fonctions de la bibliothèque sont génériques, utilisées partout..
Libre à toi de refaire ce que tu veux, mais je trouve particulièrement ... de vouloir remplacer des fonctions standards.. plutôt que de bien les utiliser..
mdrrrr :mouarf::mouarf:
j'aimerais bien :
- Primo que tu me montres un lien disant que ces fonctions sont "dépréciées"
- Secondo - à part pour M$, et c'est dû à son système de sécurité lâche, et non à l'utilisation de telle ou telle fonction de bibliothèques standards de langages standards - un exemple de prise de contrôle d'une machine par un memmove 8O