6

LoadLibraryを介して(制御下にない)外部DLLをロードすると、それらのDLLで静的にリンクされたCRTがファイバーローカルストレージの割り当てに失敗するという問題が発生します。これはmskb193462に似ていますが、これがFLSであり、128個しかない点が異なります。

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

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

4

1 に答える 1

3

率直に言って、ここには解決策はありません。ロードするdllの数を減らす必要があります。

dllのインポートアドレステーブルをフックすることもできますが、LoadLibraryが戻ったときにのみIATフックをインストールでき、CRT初期化コードはすでに処理されているDllProcessAttachに応答して実行されるため、遅すぎます。

メモリ内でkernel32.dllモジュールを見つけて、GetProcAddressまたはおそらくFlsAllocのエクスポートアドレスにパッチを適用して、実装を指すようにすることができます。しかし、そのアプローチは深刻にハッキングされています。

于 2009-09-17T15:21:28.040 に答える