Question

Lors du chargement de DLL externes (non sous notre contrôle) via LoadLibrary, nous rencontrons un problème où le CRT lié de manière statique dans ces DLL ne parvient pas à allouer le stockage Fibre-Local. Ceci est similaire à mskb 193462 , sauf qu'il s'agit de services en français et que leur nombre est limité à 128.

Existe-t-il des moyens utiles de contourner le problème? Le CRT utilise GetProcAddress pour trouver FlsAlloc de toute façon (puisque cela n’a apparemment jamais existé sous XP), en a-t-il même vraiment besoin?

(Ceci est sur Vista, où FlsAlloc existe réellement; les DLL semblent utiliser MSVC8)

Était-ce utile?

La solution

Il n’ya franchement pas de solution ici, à moins de charger moins de dlls.

Vous pouvez raccorder la table des adresses d'importation de la DLL - mais cela arrivera trop tard car vous ne pourrez installer un raccordement IAT que lorsque LoadLibrary sera renvoyé. Le code d'initialisation du CRT s'exécutera probablement en réponse à DllProcessAttach qui aura déjà été traité.

Vous pouvez, je suppose, trouver le module kernel32.dll en mémoire et patcher l’adresse d’exportation pour GetProcAddress ou peut-être FlsAlloc afin de pointer vers votre implémentation. Mais cette approche commence à devenir sérieuse.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top