Stai lavorando alle limitazioni di fls con troppi CRT collegati staticamente?
-
08-07-2019 - |
Domanda
Quando si caricano DLL esterne (non sotto il nostro controllo) tramite LoadLibrary, si verifica un problema a causa del quale il CRT collegato staticamente in tali DLL non riesce a allocare memoria locale. Questo è simile a mskb 193462 , tranne per il fatto che si tratta di FLS e ce ne sono solo 128.
Esistono modi utili per aggirare il problema? Il CRT utilizza GetProcAddress per trovare comunque FlsAlloc (dal momento che apparentemente non è mai esistito in XP), quindi ne ha davvero bisogno?
(Questo è su Vista, dove attualmente esiste FlsAlloc; le DLL sembrano usare MSVC8)
Soluzione
Francamente non esiste una soluzione qui, a meno di caricare meno dll.
È possibile agganciare la tabella degli indirizzi di importazione della DLL, ma ciò accadrà troppo tardi poiché è possibile installare un hook IAT solo quando LoadLibrary ritorna e il codice di inizializzazione CRT probabilmente viene eseguito in risposta a DllProcessAttach che sarà già stato elaborato.
Potrei immaginare di trovare il modulo kernel32.dll in memoria e correggere l'indirizzo di esportazione per GetProcAddress o forse FlsAlloc per puntare alla tua implementazione. Ma questo approccio sta diventando seriamente hacker.