使用太多静态链接的CRT来解决fls限制?

时间:2009-09-17 08:17:39

标签: windows multithreading msvcrt

当通过LoadLibrary加载外部DLL(不在我们的控制之下)时,我们遇到了这些DLL中静态链接的CRT无法分配光纤本地存储的问题。这类似于mskb 193462,除了这是FLS并且只有128个。

有什么有用的方法可以解决这个问题吗? CRT正在使用GetProcAddress来查找FlsAlloc(因为这显然从未在XP中存在过),所以它甚至真的需要它吗?

(这是在Vista上,其中FlsAlloc实际存在; DLL似乎使用MSVC8)

1 个答案:

答案 0 :(得分:2)

这里坦率地说没有解决方案,因为没有更少的dll。

你可以挂钩dll的导入地址表 - 但这种情况发生得太晚,因为你只能在LoadLibrary返回时安装IAT挂钩,并且CRT初始化代码可能是为了响应已经处理过的DllProcessAttach而执行的。

我可以猜测在内存中找到kernel32.dll模块,并修补GetProcAddress的导出地址或者修补FlsAlloc以指向您的实现。但这种方法变得非常严厉。