2012-05-19 47 views
3

因此,通常当我使用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最后一次,让您的IDB同步(或作出新的IDB衍合后)

Edit->Segments->Rebase Program...

在新菜单中检查了盒Fix up ProgramRebase the whole image,它应该很好去。

+0

这更相关。标记为答案。 – Qix

+0

它如何被使用?每个进程都有它自己的地址空间... – Remko

+0

@Remko当使用DLL时,您将DLL的地址空间映射到EXE的地址空间。如果您正在加载多个DLL,则两个DLL可能具有相同的“首选地址”。当发生这种情况时,要加载的第二个DLL获取一个随机可用地址。如果第二个DLL是您正在反编译的那个DLL,则每次运行时,IDA都需要移动它的反编译代码的基址。 –

1

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

由于在网站上解释的那样,问题出现了(至少在我的情况)为地址空间布局随机化(ASLR)的结果。当PE可选标题DllCharacteristics字段包含具有值0x0040的掩码IMAGE_DLL_CHARACTERISTICS_DYNAMIC_BASE时,ASLR被启用。

在我的情况下,DllCharacteristics字段是0x8160所以很清楚0x0040掩码存在。

通过去除0x0040面罩来修正经常重新镶嵌问题。设置DllCharacteristics字段为0x81200x8100为我做了诡计。

NB:使用十六进制编辑器DllCharacteristics字段可以位于一个PE签名的开始0x5E的偏移量offset