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)

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top