4 votes

Détection de l'utilisation après free() sous Windows. (pointeurs pendants)

J'essaie de détecter les bogues "Use after free()", autrement connus sous le nom de "Dangling pointers". Je sais que Valgrind peut être utilisé pour détecter les bogues "Use after free" sur la plate-forme *nix, mais qu'en est-il de Windows ? Et si je n'ai pas les sources ? Existe-t-il un meilleur programme que Valgrind pour détecter tous les pointeurs pendants dans un programme ? Un logiciel libre et ouvert serait préférable, mais je suis prêt à utiliser une solution commerciale si elle peut faire l'affaire.

5voto

Hans Passant Points 475940

L'allocateur de mémoire de débogage de MSVC le fait déjà. Lorsque vous obtenez 0xfeeefeee à partir d'un déréférencement de pointeur, vous avez fait un dangling. Avec un peu de chance, cela fera sauter le programme.

5voto

Michael Burr Points 181287

Vous pouvez utiliser gflags.exe et le Outils de débogage pour Windows pour activer la vérification du tas dans un processus :

Cela fait un moment que je ne l'ai pas utilisé, et je ne me souviens honnêtement pas de la manière dont il interagit avec le tas du runtime C par rapport au gestionnaire de tas de Windows (pour s'assurer que chaque fichier de type malloc() / free() / new / delete est vérifié séparément).

Gratuit, mais pas open source.

3voto

Billy ONeal Points 50631

Il n'est pas tout à fait aussi bon que Valgrind, mais le programme de Microsoft Vérificateur d'application remplit une fonction similaire pour Windows. Il vous permet également de simuler des conditions d'erreur pour la plupart des API afin de vous indiquer si les choses vont exploser au visage de votre client le plus important :)

2voto

Greg Hewgill Points 356191

Il y a des années, j'ai utilisé Purifier à cette fin. Il existe depuis longtemps et était assez bon lorsque je l'ai utilisé.

1voto

Ira Baxter Points 48153

Voir CheckPointer, notre Contrôleur de sécurité de la mémoire pour C . Il faut avoir le code source, mais il fonctionne sous Windows.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X