所以通常当我使用IDA调试时,我没有遇到任何问题;然而,有了这个特殊的过程(在模块之前大小为9.9 MB),IDA坚持每次启动过程都会重新定义,这会冻结IDA并迫使我在实际启动之前等待20-30分钟。
为什么会这样做,我可以以某种方式禁用它吗?我很高兴能够进行高级调试,所以对于我来说,变调只会对我有点意义。
答案 0 :(得分:8)
如果其他人像我一样找到这个页面,如果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
的复选框,这样就可以了。
答案 1 :(得分:1)
Will Donohoe于2013年5月31日回答了这个问题。访问时的网站是https://will.io/blog/2013/05/31/disable-aslr/
正如网站上所解释的那样,由于地址空间布局随机化(ASLR),问题出现了(至少在我的情况下)。当 PE可选标题的 DllCharacteristics 字段包含值IMAGE_DLL_CHARACTERISTICS_DYNAMIC_BASE
的掩码0x0040
时,会启用ASLR。
在我的情况下, DllCharacteristics 字段为0x8160
,因此显然存在0x0040
掩码。
通过删除0x0040
掩码,纠正了经常性的重新定位问题。将 DllCharacteristics 字段设置为0x8120
或0x8100
对我来说非常有用。
NB: DllCharacteristics 字段可以位于 PE签名偏移>> PE签名偏移>的偏移量> strong>使用十六进制编辑器。