2009-09-17 7 views
5

Quando si caricano DLL esterne (non sotto il nostro controllo) tramite LoadLibrary, si verifica un problema in cui il CRT collegato in modo statico in quelle DLL non riesce ad allocare l'archiviazione locale in fibra. Questo è simile a mskb 193462, tranne che questo è FLS e ce ne sono solo 128.Si lavora intorno ai limiti FLS con troppi CRT collegati staticamente?

Esistono modi utili per aggirare il problema? Il CRT sta usando GetProcAddress per trovare FlsAlloc comunque (dal momento che apparentemente non è mai esistito in XP), quindi ne ha davvero bisogno?

(Questo è su Vista, dove esiste realmente FlsAlloc; le DLL sembrano essere utilizzando MSVC8)

risposta

2

Non v'è alcuna soluzione francamente qui, a corto di caricare meno DLL.

È possibile collegare la tabella degli indirizzi di importazione della DLL, ma ciò avverrà troppo tardi poiché è possibile installare un hook IAT solo quando LoadLibrary restituisce e il codice di inizializzazione CRT viene probabilmente eseguito in risposta a DllProcessAttach che sarà già stato elaborato.

È possibile trovare il modulo kernel32.dll in memoria e applicare l'indirizzo di esportazione per GetProcAddress o FlsAlloc per indicare l'implementazione. Ma questo approccio sta diventando seriamente hackish.

+0

Siamo andati con la soluzione temporanea di tagliare le cose e sperando di non aver bisogno di troppo :(Tentare di applicare patch a FlsAlloc è troppo spaventoso, anche se la maggior parte di quelle DLL sono caricate in fase di esecuzione (tramite LoadLibrary) probabilmente è tecnicamente possibile. – Mook

Problemi correlati