したがって、通常、IDAを使用してデバッグする場合、問題は発生しません。ただし、この1つの特定のプロセス(モジュールの前のサイズは9.9 MB)では、IDAは、プロセスを開始するたびにリベースすることを要求します。これにより、IDAがフリーズし、実際に開始する前に20〜30分待つ必要があります。
なぜこれを行うのですか、そしてどういうわけかこれを無効にすることができますか?私はこのような高度なデバッグに慣れていないので、リベースは私には少ししか意味がありません。
私のように他の誰かがこのページを見つけた場合、DLLの優先エントリポイントがすでに使用されている場合にも発生する可能性があり、続行する前にリベースする必要があります。
これを修正するには、Windows SDK(またはVisual Studio)に付属のReBase.exeツールを使用できます。
ReBase.Exe -b 7600000 myBadBasedDll.dll
これにより、dllのベースが0x7600000にリセットされます。次に、IDBを同期させるために、最後にIDAでリベースを実行する必要があります(またはリベース後に新しいIDBを作成します)。
Edit->Segments->Rebase Program...
Fix up Program
新しいメニューで、とのチェックボックスをオンにRebase the whole image
します。これで問題ありません。
この質問には、2013年5月31日にWillDonohoeが回答しました。アクセス時のウェブサイトはhttps://will.io/blog/2013/05/31/disable-aslr/です。
サイトで説明されているように、問題はアドレス空間配置のランダム化(ASLR)の結果として(少なくとも私の場合は)発生しました。ASLRは、 PEオプションヘッダーのDllCharacteristicsフィールドに値が。のマスクが含まれている場合に有効になります。IMAGE_DLL_CHARACTERISTICS_DYNAMIC_BASE
0x0040
私の場合、DllCharacteristicsフィールドは0x8160
非常に明確で、0x0040
マスクが存在していました。
再発するリベースの問題は、0x0040
マスクを削除することで修正されました。DllCharacteristicsフィールドをに設定する0x8120
か0x8100
、私のためにトリックを行いました。
注意: DllCharacteristicsフィールドは、 16進エディターを使用する場合、 PE署名オフセットの先頭から0x5Eのオフセットに配置できます。