2013-02-24 30 views
0

我正在使用winappdbg框架在python中構建調試器。使用winappdbg設置斷點後不斷髮生訪問衝突

我可以使用event.debug.break_at(event.get_pid(),地址)設置一些斷點,以便設置斷點但設置了certin斷點之後(而不是在設置它們時但是一旦程序擊中它們時!)我得到訪問衝突異常。

例如,我可以在0x48d1ea或0x47a001設置一個接入點,但如果我在0x408020設置一個接入點,我會得到異常。

模塊基址爲0x400000。

0048D0BE: xor esi,eax

0048D0C0: call [winamp!start+0x25c1]

760DCC50: add [ebx],dh

Access Violation

Exception event (00000001) at address 779315DE, process 9172, thread 9616

b.t.w 這是我在地址上設置由IDA生成的文件PIDA的斷點。 我重新整理了文件,所以地址應該對齊

謝謝!

回答

0

Apperently的pida_dump腳本未得到正確的基地址,所以當我做了重訂代碼就像

地址 - old_base_address + new_base_address

而且由於old_base_address是撥錯它錯過了我的BP。

感謝任何幫助!

0

我的第一個猜測是你想要在指令中間設置斷點。我的第二個猜測是,你也在修改寄存器的內容,這是寫入[ebx]時訪問衝突的原因。 (也注意0x779315DE可能在ntdll.dll而不是winamp.exe,所以它可能完全是其他的東西)。

但我不知道沒有更多的信息。你可以在你提到的地址發佈代碼嗎?你有沒有試着繼續這個例外,看看會發生什麼?這些寄存器的內容也將有所幫助,就像試用微軟的調試器(ntsd.exe)一樣,看看問題是否是特定於WinAppDbg的。

關於來自IDA的地址,您可以嘗試使用相對地址來避免ASLR出現問題。例如,如果「Winamp的」模塊基地是爲0x400000和斷點應該是0x408020,你可以在設置斷點這樣的「Winamp的0x8020!」:

address = event.get_process().resolve_label("winamp!0x8020") 
event.debug.break_at(event.get_pid(), address) 

希望這有助於! :)

+0

檢查PIDA文件後,它看起來像PIDA文件在加載時具有正確的基址。當我對模塊地址0x400000進行重新綁定時,它實際上已損壞。 – user2105183 2013-03-04 22:04:20

+0

@ user2105183確實使用相對地址工作? – MarioVilas 2013-03-05 18:56:34