6

所以通常当我使用 IDA 进行调试时,我不会遇到任何问题。然而,对于这个特殊的进程(模块之前的大小为 9.9 MB),IDA 坚持每次启动进程时都会重新设置基准,这会冻结 IDA 并迫使我等待 20-30 分钟才能真正开始。

为什么它会这样做,我可以以某种方式禁用它吗?我对诸如此类的高级调试很陌生,因此重新设置基数对我来说只有一点意义。

4

2 回答 2

10

万一其他人像我一样找到这个页面,如果 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很好。

于 2012-09-05T18:07:34.020 回答
2

这个问题由 Will Donohoe 于 31-05-2013 回答。访问时的网站是https://will.io/blog/2013/05/31/disable-aslr/

正如网站上所解释的,问题出现(至少在我的情况下)是由于地址空间布局随机化 (ASLR)造成的。当PE Optional Header的DllCharacteristics字段包含值为的掩码时,启用 ASLR 。IMAGE_DLL_CHARACTERISTICS_DYNAMIC_BASE0x0040

在我的情况下,DllCharacteristics字段0x8160非常明显地0x0040存在掩码。

因此,通过移除0x0040掩码来纠正反复出现的变基问题。将DllCharacteristics字段设置为0x81200x8100对我有用。

注意:当使用Hex Editor时, DllCharacteristics字段可以位于距PE Signature Offset开头0x5E 的偏移处

于 2016-10-31T17:04:00.187 回答