¿Trabajando alrededor de las limitaciones de fls con demasiados CRT enlazados estáticamente?

StackOverflow https://stackoverflow.com/questions/1437422

  •  08-07-2019
  •  | 
  •  

Pregunta

Al cargar archivos DLL externos (que no están bajo nuestro control) a través de LoadLibrary, nos encontramos con un problema en el que el CRT vinculado estáticamente en esos archivos DLL no puede asignar el almacenamiento local de fibra. Esto es similar a mskb 193462 , excepto que esto es FLS y solo hay 128 de ellos.

¿Hay alguna forma útil de solucionar el problema? El CRT está utilizando GetProcAddress para encontrar FlsAlloc de todos modos (ya que aparentemente nunca existió en XP), ¿entonces realmente lo necesita?

(Esto es en Vista, donde FlsAlloc realmente existe; las DLL parecen estar usando MSVC8)

¿Fue útil?

Solución

Francamente no hay solución aquí, salvo cargar menos dlls.

Puede enganchar la tabla de direcciones de importación del dll, pero eso sucederá demasiado tarde, ya que solo puede instalar un enganche IAT cuando LoadLibrary regrese, y el código de inicialización CRT probablemente se ejecute en respuesta a DllProcessAttach que ya habrá sido procesado.

Supongo que podría encontrar el módulo kernel32.dll en la memoria y parchear la dirección de exportación para GetProcAddress o quizás FlsAlloc para señalar su implementación. Pero ese enfoque se está volviendo seriamente hack.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top