解决太多静态链接CRT的限制?

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

有没有什么有用的方法来解决这个问题? CRT使用GetProcAddressfindFlsAlloc无论如何(因为这显然从来没有在XP中),所以它甚至真的需要它?

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

Solutions Collecting From Web of "解决太多静态链接CRT的限制?"

这里坦白说没有解决办法,缺少加载更少的dll。

你可以挂钩dll的导入地址表 – 但是这样做太迟了,因为你只能在LoadLibrary返回时安装一个IAT钩子,并且CRT初始化代码可能会响应已经被处理的DllProcessAttach而执行。

我猜你可以在内存中找到kernel32.dll模块,并为GetProcAddress或者FlsAlloc打补丁导出地址来指向你的实现。 但是这种方法越来越严重。