静的にリンクされたCRTが多すぎるため、flsの制限を回避できますか?

StackOverflow https://stackoverflow.com/questions/1437422

  •  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のエクスポートアドレスを修正して、実装を指すようにすることができます。しかし、そのアプローチは真剣にハッキングされています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top