2009-09-17 4 views
5

LoadLibrary経由で外部DLL(私たちの制御下にない)をロードすると、これらのDLLの静的にリンクされたCRTがファイバローカルストレージを割り当てられないという問題が発生します。これはmskb 193462に似ていますが、これはFLSであり、そのうち128個しかありません。静的にリンクされたCRTの数が多すぎるためflsの制限を回避しますか?

問題を回避する便利な方法はありますか? CRTはGetProcAddressを使ってFlsAllocを検索しています(それはXPでは決して存在しなかったためです)ので、本当に必要なのでしょうか?

(これはFlsAllocが実際に存在するVistaでは、上で、DLLがMSVC8を使用しているように見える)

答えて

2

以下のDLLをロードする短いここでの解決策は、率直に言ってありません。

DLLのインポートアドレステーブルをフックすることはできますが、LoadLibraryが戻るときにIATフックしかインストールできないため、CRT初期化コードが既に処理されているDllProcessAttachに応答して実行される可能性があります。

メモリ内にkernel32.dllモジュールがあり、GetProcAddressまたはFlsAllocのエクスポートアドレスにパッチを適用して実装されていることがわかります。しかし、そのアプローチは真剣にハックアップしています。

+0

FlsAllocにパッチを当てようとすると、あまりにも恐ろしいですが、それらのDLLのほとんどは実行時に(LoadLibrary経由で)読み込まれているので技術的にはおそらく可能。 – Mook

関連する問題