所以通常当我使用 IDA 进行调试时,我不会遇到任何问题。然而,对于这个特殊的进程(模块之前的大小为 9.9 MB),IDA 坚持每次启动进程时都会重新设置基准,这会冻结 IDA 并迫使我等待 20-30 分钟才能真正开始。
为什么它会这样做,我可以以某种方式禁用它吗?我对诸如此类的高级调试很陌生,因此重新设置基数对我来说只有一点意义。
万一其他人像我一样找到这个页面,如果 DLL 的首选入口点已经在使用中,也可能导致它必须重新设置它才能继续。
要更正此问题,您可以使用 Windows SDK(或 Visual Studio)附带的 ReBase.exe 工具
ReBase.Exe -b 7600000 myBadBasedDll.dll
这样会将 dll 的基数重置为 0x7600000。然后,您必须最后一次在 IDA 中进行 rebase 以使您的 idb 同步(或在 rebase 后创建一个新的 idb)
Edit->Segments->Rebase Program...
在新菜单中选中和框,Fix up Program
应该Rebase the whole image
很好。
这个问题由 Will Donohoe 于 31-05-2013 回答。访问时的网站是https://will.io/blog/2013/05/31/disable-aslr/
正如网站上所解释的,问题出现(至少在我的情况下)是由于地址空间布局随机化 (ASLR)造成的。当PE Optional Header的DllCharacteristics字段包含值为的掩码时,启用 ASLR 。IMAGE_DLL_CHARACTERISTICS_DYNAMIC_BASE
0x0040
在我的情况下,DllCharacteristics字段0x8160
非常明显地0x0040
存在掩码。
因此,通过移除0x0040
掩码来纠正反复出现的变基问题。将DllCharacteristics字段设置为0x8120
或0x8100
对我有用。
注意:当使用Hex Editor时, DllCharacteristics字段可以位于距PE Signature Offset开头0x5E 的偏移处。