静的にリンクされたCRTが多すぎるため、flsの制限を回避できますか?
-
08-07-2019 - |
質問
LoadLibraryを介して外部DLL(私たちの制御下にない)をロードすると、それらのDLLで静的にリンクされたCRTがファイバーローカルストレージの割り当てに失敗するという問題に直面しています。これは mskbをマップできます。 193462 。ただし、これはFLSであり、128個しかありません。
問題を回避する有用な方法はありますか? CRTはGetProcAddressを使用して、とにかくFlsAllocを見つけています(XPには存在しなかったようです)ので、本当に必要ですか?
(これはVistaで、FlsAllocが実際に存在します。DLLはMSVC8を使用しているようです)
解決
ここに率直に言って解決策はありません。少ないDLLをロードすること以外は。
dllのインポートアドレステーブルをフックすることはできますが、LoadLibraryが戻るときにIATフックしかインストールできないため、処理が遅すぎます。CRT初期化コードはおそらく、すでに処理されているDllProcessAttachに応答して実行されます。
メモリ内のkernel32.dllモジュールを見つけて、GetProcAddressまたはおそらくFlsAllocのエクスポートアドレスを修正して、実装を指すようにすることができます。しかし、そのアプローチは真剣にハッキングされています。
所属していません StackOverflow