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

При загрузке внешних библиотек DLL (не находящихся под нашим контролем) через LoadLibrary мы сталкиваемся с проблемой, когда статически связанные CRT в этих библиотеках не могут распределить локальное хранилище данных. Это похоже на mskb 193462 , за исключением того, что это FLS, и их всего 128.

Есть ли полезные способы обойти эту проблему? CRT использует GetProcAddress для поиска FlsAlloc в любом случае (так как этого, по-видимому, никогда не было в XP), так действительно ли оно вообще нужно?

(Это в Vista, где FlsAlloc действительно существует; библиотеки DLL используют MSVC8)

1 Ответ

2 голосов
/ 17 сентября 2009

Откровенно говоря, здесь нет решения, если не считать загрузку менее dll.

Вы можете перехватить таблицу адресов импорта библиотеки DLL - но это произойдет слишком поздно, поскольку вы можете установить перехват IAT только при возврате LoadLibrary, и код инициализации CRT, вероятно, выполняется в ответ на DllProcessAttach, который уже будет обработан.

Можно было бы найти модуль kernel32.dll в памяти и исправить адрес экспорта для GetProcAddress или, возможно, FlsAlloc, чтобы указать на вашу реализацию. Но такой подход становится серьезно хакерским.

...