当通过LoadLibrary加载外部DLL(不在我们的控制之下)时,我们遇到了这些DLL中静态链接的CRT无法分配光纤本地存储的问题。这类似于mskb 193462,除了这是FLS并且只有128个。
有什么有用的方法可以解决这个问题吗? CRT正在使用GetProcAddress来查找FlsAlloc(因为这显然从未在XP中存在过),所以它甚至真的需要它吗?
(这是在Vista上,其中FlsAlloc实际存在; DLL似乎使用MSVC8)
答案 0 :(得分:2)
这里坦率地说没有解决方案,因为没有更少的dll。
你可以挂钩dll的导入地址表 - 但这种情况发生得太晚,因为你只能在LoadLibrary返回时安装IAT挂钩,并且CRT初始化代码可能是为了响应已经处理过的DllProcessAttach而执行的。
我可以猜测在内存中找到kernel32.dll模块,并修补GetProcAddress的导出地址或者修补FlsAlloc以指向您的实现。但这种方法变得非常严厉。