Обойти ограничения FLS со слишком большим количеством статически связанных ЭЛТ?
-
08-07-2019 - |
Вопрос
При загрузке внешних библиотек DLL (не находящихся под нашим контролем) через LoadLibrary мы сталкиваемся с проблемой, когда статически связанные CRT в этих библиотеках не могут выделить локальное хранилище волоконно-оптических линий. Это похоже на mskb 193462 , за исключением того, что это FLS, а их всего 128.
Есть ли полезные способы обойти эту проблему? CRT использует GetProcAddress для того, чтобы найти FlsAlloc в любом случае (так как этого, очевидно, никогда не было в XP), так ли это вообще нужно?
(Это в Vista, где FlsAlloc действительно существует; библиотеки DLL используют MSVC8)
Решение
Откровенно говоря, здесь нет решения, если не загружать меньше dll.
Вы можете перехватить таблицу адресов импорта библиотеки DLL - но это произойдет слишком поздно, поскольку вы можете установить перехват IAT только после возврата LoadLibrary, и код инициализации CRT, вероятно, выполняется в ответ на DllProcessAttach, который уже будет обработан. р>
Можно было бы найти модуль kernel32.dll в памяти и исправить адрес экспорта для GetProcAddress или, возможно, FlsAlloc, чтобы указать на вашу реализацию. Но такой подход становится серьезно хакерским.