2012-05-19 69 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