J'écris une application de suivi de la mémoire qui relie tous les appels à HeapAlloc en utilisant le mécanisme de patch IAT. L'idée est de capturer tous les appels à HeapAlloc et d'obtenir une callstack.Une impasse avec des appels d'accrochage à HeapAlloc pour une application de suivi de mémoire
Cependant, je suis actuellement confronté à un problème avec l'obtention de la callstack en utilisant DBGHELP Apis. J'ai trouvé que dbghelp dll lui-même lie à MSVCRT dll et cette dépendance résulte en un appel récursif. Lorsque j'essaie d'obtenir une pile d'appel pour l'un des appels de l'application cible, dbghelp appelle en interne une méthode de MSVCRT qui appelle à nouveau HeapAlloc. Et comme j'ai déjà corrigé MSVCRT, il en résulte une boucle infinie.
Est-ce que quelqu'un a fait face à ce problème et l'a résolu? Y a-t-il un moyen de sortir de cette impasse? Qu'en est-il de l'utilisation de produits de suivi de la mémoire réels comme GlowCode?
Merci pour l'idée, statique ne peut pas m'aider car les appels peuvent provenir de plusieurs threads. Je pense que je peux utiliser TLS à cette fin. – Canopus
En supposant que TLS est la variante Windows de données spécifiques au thread (c'est-à-dire, un «statique» par thread), alors oui, je le pense. Mais HeapAlloc et DbgHelp sont-ils spécifiques au thread ou au processus? Si ce dernier, vous avez vraiment besoin d'un drapeau qui traverse les limites de fil (et est mutex-protégé). – paxdiablo
Merci encore pour l'indice. Je viens de trouver que DbgHelp n'est pas thread-safe. Donc j'ai aussi besoin d'un gardien. – Canopus