重新调试和调试

时间:2012-05-19 07:09:57

标签: rebase ida

所以通常当我使用IDA调试时,我没有遇到任何问题;然而,有了这个特殊的过程(在模块之前大小为9.9 MB),IDA坚持每次启动过程都会重新定义,这会冻结IDA并迫使我在实际启动之前等待20-30分钟。

为什么会这样做,我可以以某种方式禁用它吗?我很高兴能够进行高级调试,所以对于我来说,变调只会对我有点意义。

2 个答案:

答案 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 ProgramRebase 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 字段设置为0x81200x8100对我来说非常有用。

NB: DllCharacteristics 字段可以位于 PE签名偏移> PE签名偏移的偏移量 strong>使用十六进制编辑器