Pergunta

Ao carregar DLLs externos (não sob nosso controle) via LoadLibrary, estamos atingindo um problema onde a CRT estaticamente ligado nessas DLLs não estão a alocar armazenamento de fibra local. Isto é semelhante ao MSKB 193462 , exceto que este é FLS e há apenas 128 deles.

Existem maneiras úteis para solucionar o problema? A CRT está usando GetProcAddress para encontrar FlsAlloc qualquer maneira (desde que, aparentemente, nunca existiu no XP), por isso não é mesmo realmente precisa dele?

(Isto é no Vista, onde FlsAlloc realmente existe; as DLLs parecem estar usando MSVC8)

Foi útil?

Solução

Não é francamente nenhuma solução aqui, curta de carregamento menos DLLs.

Você poderia ligar a tabela de endereços de importação do dll - mas isso vai acontecer muito tarde como você só pode instalar um gancho IAT quando retorna LoadLibrary e o código de inicialização CRT provavelmente executa em resposta a DllProcessAttach que já terão sido processadas

Você poderia Eu acho que encontrar o módulo kernel32.dll na memória, e corrigir o endereço de exportação para GetProcAddress ou talvez FlsAlloc para apontar para a sua implementação. Mas essa abordagem está ficando sério hackish.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top