Обойти ограничения FLS со слишком большим количеством статически связанных ЭЛТ?

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

  •  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, чтобы указать на вашу реализацию. Но такой подход становится серьезно хакерским.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top