Сейчас на форуме: hgdagon, asfa (+4 невидимых)

 eXeL@B —› Программирование —› DebugApi
Посл.ответ Сообщение

Ранг: 15.5 (новичок)
Активность: 0.010
Статус: Участник

Создано: 23 мая 2007 21:02
· Личное сообщение · #1

сам незнаю как разрулить.
т.з.: =)
надо поставить бряк

бряк оочень далеко от точки входа.
ну пешу 0cch а вот в флагах неразобрался видимо

кода немного а сам разрулить немогу

.while TRUE
invoke WaitForDebugEvent, addr DBEvent, INFINITE
.if DBEvent.dwDebugEventCode==EXIT_PROCESS_DEBUG_EVENT
.break
.elseif DBEvent.dwDebugEventCode==CREATE_PROCESS_DEBUG_EVENT
; шлепаем int3 куда надо
.elseif DBEvent.dwDebugEventCode==EXCEPTION_DEBUG_EVENT
.if DBEvent.u.Exception.pExceptionRecord.ExceptionCode==EXCEPTION_BREAKPOI NT
;
; блаблабла бряк пришел
invoke ContinueDebugEvent, DBEvent.dwProcessId,DBEvent.dwThreadId,DBG_CONTINUE
.continue
.endif
.endif
invoke ContinueDebugEvent, DBEvent.dwProcessId,DBEvent.dwThreadId,DBG_CONTINUE;DBG_EXCEPTION_NOT_ HANDLED

.endw





так вот если "крутить" event-loop через
invoke ContinueDebugEvent, DBEvent.dwProcessId,DBEvent.dwThreadId,DBG_EXCEPTION_NOT_HANDLED

то работает все кроме бряков

а если
invoke ContinueDebugEvent, DBEvent.dwProcessId,DBEvent.dwThreadId,DBG_CONTINUE

то бряки работают но до них оооочень долго трейсить
для бряков сразу за оеп все ок

помогите если знаете как быстринько дотрейсить до нужного мне кода дааалеко от оеп



Ранг: 203.3 (наставник)
Активность: 0.220
Статус: Участник
UPX Killer -d

Создано: 23 мая 2007 21:22 · Поправил: AlexZ
· Личное сообщение · #2

Ой, с трейсингом будут траблы. Особенно, если различные ОС. Сам на такие грабли наступал, скорее всего это глюк то ли оси то ли ДеглюкАпи. Лучше ставь куда тебе надо int 3 и запоминай это место, будет в разы проще.
Почему-то иногда (в частности на SP1) с флажком TF особо по коду не погуляешь.

-----
Я медленно снимаю с неё UPX... *FF_User*




Ранг: 15.5 (новичок)
Активность: 0.010
Статус: Участник

Создано: 23 мая 2007 22:01
· Личное сообщение · #3

AlexZ ставить то я ставлю
но если в главном цикле юзаю
invoke ContinueDebugEvent, DBEvent.dwProcessId,DBEvent.dwThreadId,DBG_EXCEPTION_NOT_HANDLED
на него непопадает никогда =(

а если
invoke ContinueDebugEvent, DBEvent.dwProcessId,DBEvent.dwThreadId,DBG_CONTINUE
начинается нудный трейс %)



Ранг: 203.3 (наставник)
Активность: 0.220
Статус: Участник
UPX Killer -d

Создано: 23 мая 2007 22:11
· Личное сообщение · #4

lapslap, что-то не могу найти тему похожую, поэтому приатачу ещё раз екзампл.

70d9_23.05.2007_CRACKLAB.rU.tgz - Traicer_by_AlexZ.zip

-----
Я медленно снимаю с неё UPX... *FF_User*




Ранг: 15.5 (новичок)
Активность: 0.010
Статус: Участник

Создано: 23 мая 2007 22:15
· Личное сообщение · #5

AlexZ thx за сырки
я их находил тут, когда пришлось заняться этим вопросом)
покурим их




Ранг: 990.2 (! ! !), 380thx
Активность: 0.680
Статус: Модератор
Author of DiE

Создано: 24 мая 2007 09:04 · Поправил: Hellspawn
· Личное сообщение · #6

lapslap пишет:
на него непопадает никогда =(


бред) значит ты что то не так делаешь и вообще надо адрес проверять обязательно
вот отрывок из моего модуля, работает как часы
IsExcept := False;
if WaitForDebugEvent(DE,INFINITE) then
begin
// ...
if (DE.dwDebugEventCode = EXCEPTION_DEBUG_EVENT) then
begin
IsExcept:=True;
case DE.Exception.ExceptionRecord.ExceptionCode of
EXCEPTION_SINGLE_STEP: ExceptionSingleStep(DE.Exception.ExceptionRecord);
EXCEPTION_BREAKPOINT : ExceptionBreakPoint(DE.Exception.ExceptionRecord);
EXCEPTION_GUARD_PAGE : ExceptionGuardPage(DE.Exception.ExceptionRecord);
else DbgControl:=DBG_EXCEPTION_NOT_HANDLED;
end;
end;
// ...
If (not IsExcept) then DbgControl:=DBG_CONTINUE;
ContinueDebugEvent(DE.dwProcessId,DE.dwThreadId,DbgControl);
end;


-----
[nice coder and reverser]



 eXeL@B —› Программирование —› DebugApi
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати