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

 eXeL@B —› Программирование —› Debug API: DebugActiveProcess(GetCurrentProcessId)
Посл.ответ Сообщение

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

Создано: 11 июня 2007 21:32
· Личное сообщение · #1

Люди добрые помогите.
Ни как не могу добиться того чтобы программа сама себя отлаживала.
То есть DebugActiveProcess(GetCurrentProcessId) выдала true или есть какой нибудь
другой способ подключиться к самому себе и ловить int3 прерывания.
Мож кто сталкивался с такой проблемой, подскажите.




Ранг: 260.9 (наставник)
Активность: 0.120
Статус: Участник
John Smith

Создано: 11 июня 2007 21:48
· Личное сообщение · #2

ловить можно с помощью seh'ов

-----
Недостаточно только получить знания:надо найти им приложение




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

Создано: 11 июня 2007 22:14
· Личное сообщение · #3

или veh...



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

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

Вот кусок:

procedure TForm1.FormCreate(Sender: TObject);
var
h1:cardinal;
begin
createthread(nil, 0, @debuger, nil, 0, h1);
end;

Procedure Debuger;
var
Event: TDebugEvent;
PID,TID:cardinal;
begin
pid:=GetCurrentProcessId;
tid:=GetCurrentThreadId;
if openprocess(DEBUG_PROCESS or DEBUG_ONLY_THIS_PROCESS,false,pid)<>0 then form1.caption:='1';
if DebugActiveProcess(pid) then form1.caption:='2';
while True do
begin
WaitForDebugEvent(Event, infinite);
Form1.Caption:=inttostr(Event.dwDebugEventCode);
Showmessage('Break');
ContinueDebugEvent(PID, Tid,DBG_CONTINUE);
end;
end;

В Caption пишеться 1.

Вызываеться по кнопке:

procedure TForm1.Button1Click(Sender: TObject);
begin
asm
int 3
end;
end;

при нажатии вываливаеться в отладчик делфи.
если просто запустить то External exception 80000003.

Наткнулся на
www.reng.ru/board/viewtopic.php?t=1057&view=previous&sid=dc7264d813dd3e275d5202fdf10a9ac4

Hex там случаем не есть Hex здесь?



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

Создано: 12 июня 2007 00:13
· Личное сообщение · #5

к себе ты вроде не приаттачишься...




Ранг: 1131.7 (!!!!), 447thx
Активность: 0.670.2
Статус: Участник

Создано: 12 июня 2007 03:42
· Личное сообщение · #6

YouROK, создай ещё один процесс и им отлаживай.



Ранг: 309.8 (мудрец), 21thx
Активность: 0.170
Статус: Участник

Создано: 12 июня 2007 11:47
· Личное сообщение · #7

UnhandledExceptionFilter можно поставить...

-----
Shalom ebanats!





Ранг: 66.1 (постоянный)
Активность: 0.040
Статус: Участник

Создано: 12 июня 2007 13:32
· Личное сообщение · #8

Сам себя процесс отлаживать не может. Потому что при возникновении отладочного исключения все потоки процесса замораживаются и ждут, пока отладчик не обработает исключение и не вызовет ContinueDebugEvent.




Ранг: 120.9 (ветеран), 5thx
Активность: 0.080
Статус: Участник
Programmer and reverser

Создано: 12 июня 2007 14:28
· Личное сообщение · #9

армадиллу снимал? видел как она сама себя отлаживает? вот по тому же принципу делай, я так и делал.
а INT3 можно ловить try...except вроде как

-----
Уважайте других и пишите грамотно.





Ранг: 66.1 (постоянный)
Активность: 0.040
Статус: Участник

Создано: 12 июня 2007 17:08
· Личное сообщение · #10

Executioner пишет:
а INT3 можно ловить try...except вроде как

Ага, поставить на всю прогу try...except



Ранг: 192.3 (ветеран), 18thx
Активность: 0.120
Статус: Участник
stoned machine-gunner

Создано: 12 июня 2007 19:02
· Личное сообщение · #11

YouROK
тот Hex, которого ты ищешь обитает на форуме xtin.activebb.net/ (это все, что осталось в живых от проекта xtin =/)

-----
once you have tried it, you will never want anything else




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

Создано: 14 июня 2007 18:25
· Личное сообщение · #12

try...except ловят только в определенном месте.
Мне же нужно чтобы по всей проги и я мог знать в каком месте проги оно вызвалось.




Ранг: 260.9 (наставник)
Активность: 0.120
Статус: Участник
John Smith

Создано: 14 июня 2007 18:36
· Личное сообщение · #13

как так. как раз try except ловит в блоке, указанном тобой, хоть на одной строке, хоть на всем коде исключения. почитай на васме про seh

-----
Недостаточно только получить знания:надо найти им приложение





Ранг: 66.1 (постоянный)
Активность: 0.040
Статус: Участник

Создано: 14 июня 2007 19:13
· Личное сообщение · #14

Короче говоря, приложение само себя отлаживать не может. Хотя и можно поставить блоки try...except возле int3, но зачем оно надо? Лучше всего делай по принципу Армадилы. Прога сама себя запускает еще раз и начинает отлаживать - это единственный вариант (я имею ввиду в разумных пределах ).



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

Создано: 14 июня 2007 21:17
· Личное сообщение · #15

Вопрос про SEH ктонить реализовывал его на делфи

Function MySEH(
ExceptionRecord:_EXCEPTION_RECORD;
EstablisherFrame: DWord;
var ContextRecord:_CONTEXT;
var DispatcherContext:DWord):DWord; stdcall;
Begin
ContextRecord.Eax:= 1; /////////// здесь должно писать в EAX 1
showmessage('Xa Xa');
result:=0;
End;

procedure TForm1.FormCreate(Sender: TObject);
var
handler:DWord;
begin
Handler:=DWord(@MYSeh);
asm
push Handler
push FS:[0]
mov FS:[0],ESP

xor eax,eax
div edx /////////Здесь прерываеться

mov eax,[ESP]
mov FS:[0], EAX
add esp, 8
end;
end;

по идее как написано в "Win32™ SEH изнутри" на WASM
что после отработки функции MySEH в EAX должно быть 1 но на деле совсем не так.

Мож я на делфи че не так делаю вот ссылка на статью:
www.wasm.ru/print.php?article=Win32SEHPietrek1



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

Создано: 14 июня 2007 22:18
· Личное сообщение · #16

Ладно буду изучать SEH.
На свой вопрос я получил ответ Debug API не отлаживает "сам себя".
Тему закрываю.


 eXeL@B —› Программирование —› Debug API: DebugActiveProcess(GetCurrentProcessId)
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати