2013-02-24 4 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 я беру адрес, чтобы установить точки останова из PIDA файла, созданного МАР. i rebased the file поэтому адрес должен быть выровнен

спасибо!

ответ

0

Apperently сценарий pida_dump не получил право базового адреса так, когда я сделал Rebase код был как

адрес - old_base_address + new_base_address

и потому, что old_base_address был worng он пропустил вверх мой BP.

благодарит вас за помощь!

0

Мое первое предположение: вы пытаетесь установить точку останова в середине инструкции. Мое второе предположение, вы также изменяете содержимое регистров, и это является причиной нарушения прав доступа при записи на [ebx]. (Также обратите внимание, что 0x779315DE, вероятно, находится в файле ntdll.dll, а не winamp.exe, поэтому может быть что-то совсем другое).

Но я не знаю точно, без дополнительной информации. Не могли бы вы опубликовать код по указанным вами адресам? Вы пытались продолжить исключение и посмотреть, что происходит? Содержимое регистров также поможет, так же как и попробовать отладчик Microsoft (ntsd.exe), чтобы увидеть, является ли проблема специфичной для WinAppDbg или нет.

Об адресах из IDA, вы можете попробовать использовать относительные адреса, чтобы избежать проблем с ASLR. Например, если «Winamp» базовый модуль был 0x400000, и точка останова должен быть 0x408020, вы можете установить точку останов, как это «0x8020 Winamp!»:

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

Надеется, что это помогает! :)

+0

после проверки файла PIDA похоже, что файл PIDA имеет базовый адрес при загрузке. когда я делаю переадресацию на адрес модуля 0x400000, он действительно поврежден. – user2105183

+0

@ пользователь2105183 сделал использование относительных адресов? – MarioVilas