Посл.ответ |
Сообщение |
Ранг: 21.8 (новичок) Активность: 0.01↘0 Статус: Участник
|
Создано: 11 июня 2007 21:32 · Личное сообщение · #1
Люди добрые помогите.
Ни как не могу добиться того чтобы программа сама себя отлаживала.
То есть DebugActiveProcess(GetCurrentProcessId) выдала true или есть какой нибудь
другой способ подключиться к самому себе и ловить int3 прерывания.
Мож кто сталкивался с такой проблемой, подскажите.
| Сообщение посчитали полезным: |
|
 Ранг: 260.9 (наставник) Активность: 0.12↘0 Статус: Участник John Smith
|
Создано: 11 июня 2007 21:48 · Личное сообщение · #2
ловить можно с помощью seh'ов
----- Недостаточно только получить знания:надо найти им приложение | Сообщение посчитали полезным: |
Ранг: 260.2 (наставник) Активность: 0.19↘0 Статус: Участник
|
Создано: 11 июня 2007 22:14 · Личное сообщение · #3
или veh...
| Сообщение посчитали полезным: |
Ранг: 21.8 (новичок) Активность: 0.01↘0 Статус: Участник
|
Создано: 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.19↘0 Статус: Участник
|
Создано: 12 июня 2007 00:13 · Личное сообщение · #5
к себе ты вроде не приаттачишься...
| Сообщение посчитали полезным: |
 Ранг: 1131.7 (!!!!), 447thx Активность: 0.67↘0.2 Статус: Участник
|
Создано: 12 июня 2007 03:42 · Личное сообщение · #6
YouROK, создай ещё один процесс и им отлаживай.
| Сообщение посчитали полезным: |
Ранг: 309.8 (мудрец), 21thx Активность: 0.17↘0 Статус: Участник
|
Создано: 12 июня 2007 11:47 · Личное сообщение · #7
UnhandledExceptionFilter можно поставить...
----- Shalom ebanats! | Сообщение посчитали полезным: |
 Ранг: 66.1 (постоянный) Активность: 0.04↘0 Статус: Участник
|
Создано: 12 июня 2007 13:32 · Личное сообщение · #8
Сам себя процесс отлаживать не может. Потому что при возникновении отладочного исключения все потоки процесса замораживаются и ждут, пока отладчик не обработает исключение и не вызовет ContinueDebugEvent.
| Сообщение посчитали полезным: |
 Ранг: 120.9 (ветеран), 5thx Активность: 0.08↘0 Статус: Участник Programmer and reverser
|
Создано: 12 июня 2007 14:28 · Личное сообщение · #9
армадиллу снимал? видел как она сама себя отлаживает? вот по тому же принципу делай, я так и делал.
а INT3 можно ловить try...except вроде как
----- Уважайте других и пишите грамотно. | Сообщение посчитали полезным: |
 Ранг: 66.1 (постоянный) Активность: 0.04↘0 Статус: Участник
|
Создано: 12 июня 2007 17:08 · Личное сообщение · #10
Executioner пишет:
а INT3 можно ловить try...except вроде как
Ага, поставить на всю прогу try...except
| Сообщение посчитали полезным: |
Ранг: 192.3 (ветеран), 18thx Активность: 0.12↘0 Статус: Участник 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.01↘0 Статус: Участник
|
Создано: 14 июня 2007 18:25 · Личное сообщение · #12
try...except ловят только в определенном месте.
Мне же нужно чтобы по всей проги и я мог знать в каком месте проги оно вызвалось.
| Сообщение посчитали полезным: |
 Ранг: 260.9 (наставник) Активность: 0.12↘0 Статус: Участник John Smith
|
Создано: 14 июня 2007 18:36 · Личное сообщение · #13
как так. как раз try except ловит в блоке, указанном тобой, хоть на одной строке, хоть на всем коде исключения. почитай на васме про seh
----- Недостаточно только получить знания:надо найти им приложение | Сообщение посчитали полезным: |
 Ранг: 66.1 (постоянный) Активность: 0.04↘0 Статус: Участник
|
Создано: 14 июня 2007 19:13 · Личное сообщение · #14
Короче говоря, приложение само себя отлаживать не может. Хотя и можно поставить блоки try...except возле int3, но зачем оно надо? Лучше всего делай по принципу Армадилы. Прога сама себя запускает еще раз и начинает отлаживать - это единственный вариант (я имею ввиду в разумных пределах  ).
| Сообщение посчитали полезным: |
Ранг: 21.8 (новичок) Активность: 0.01↘0 Статус: Участник
|
Создано: 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.01↘0 Статус: Участник
|
Создано: 14 июня 2007 22:18 · Личное сообщение · #16
Ладно буду изучать SEH.
На свой вопрос я получил ответ Debug API не отлаживает "сам себя".
Тему закрываю.
| Сообщение посчитали полезным: |