Effectivement !
Et en effet si tu regardes, c'est ce qui est fait ici dans le pire des cas :
// ici on gère toutes les architectures connues
#else
static void* (*volatile memset_explicit_unk)(void*, int, size_t) = memset;
#endif
Je dis le "pire", car cela fait une indirection qui tape sur le pointeur de fonction de la lib C.
Très suffisant bien sûr ! Mais juste potentiellement moins efficace que d'avoir soit :
- une implémentation locale qui tirerait un assembleur adapté ;
- son propre assembleur adapté :-)
et le fait que ça verrouille une petite zone mémoire pour le besoin.
(tu le sais bien sûr, mais je précise pour les non-initiés : il ne faut pas appliquer "volatile" sur la variable de la zone à effacer -ici "password"- mais sur l'appel de fonction comme ci-dessus)
[^] # Re: volatile ?
Posté par Tarnyko (site web personnel) . En réponse au journal C23: un memset_explicit() qui carbure. Évalué à 4. Dernière modification le 21 janvier 2025 à 09:30.
Effectivement !
Et en effet si tu regardes, c'est ce qui est fait ici dans le pire des cas :
Je dis le "pire", car cela fait une indirection qui tape sur le pointeur de fonction de la lib C.
Très suffisant bien sûr ! Mais juste potentiellement moins efficace que d'avoir soit :
- une implémentation locale qui tirerait un assembleur adapté ;
- son propre assembleur adapté :-)
et le fait que ça verrouille une petite zone mémoire pour le besoin.
(tu le sais bien sûr, mais je précise pour les non-initiés : il ne faut pas appliquer "volatile" sur la variable de la zone à effacer -ici "password"- mais sur l'appel de fonction comme ci-dessus)