9

アプリケーションの起動時に読み込まれる多くの dll ファイルを含むプロジェクトがあります。メモリ イメージが再配置されるように、dll ファイルのベースアドレスがオーバーラップします。ベースアドレスを自動的に割り当てる可能性や、各 dll ファイルの「適切な」ベースアドレスを計算する方法はありますか?

4

2 に答える 2

7

プラットフォームSDKとVisual Studioに同梱されているREBASEユーティリティを使用して、アプリケーションによってロードされたDLLの全体のベースアドレスを設定すると思います

システム Dll を除く、プログラムを構成する DLL のリストを REBASE に提供すると、REBASE はすべての DLL のダミー ロードを実行し、それらに新しいベース アドレスを割り当てます。

これは、最終ビルド ステップの一部として実行できます。

リベースに関する Dr Dobbs の記事はこちら、リベース全般に関する Microsoft の記事はこちら

于 2008-10-08T07:25:37.270 に答える
3

DLLを配布する場合、ベースアドレスの設定方法に関係なく、自分で作成していない他のDLLがすでにそのアドレスにロードされているリスクが常にあります(たとえば、グローバルフックDLL)。

さらに、Vista用にビルドしている場合は、実際に/DYNAMICBASEを使用してASLRを有効にする必要があります。

これがmsdnリンクです:http://msdn.microsoft.com/en-us/library/bb384887.aspx

于 2008-10-08T12:50:59.127 に答える