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

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

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

Создано: 18 октября 2006 08:41 · Поправил: Модератор
· Личное сообщение · #1

Почему-то не ловятся EXCEPTION_SINGLE_STEP в трейсеруемой программе. Код ниже.

procedure TForm1.Button1Click(Sender: TObject);
var
s: string;
sti:tstartupinfo;
lpPi:tprocessinformation;
DE:_Debug_event;
Cont:_Context;

begin
GetStartupInfo(sti);

s := 'c:\1.exe';
CreateProcess(nil,PChar(s),nil,nil,false,DEBUG_PROCESS or DEBUG_ONLY_THIS_PROCESS,nil,nil,StI,lpPI);


While true do
Begin
WaitForDebugEvent(de,INFINITE);
Memo1.Lines.Add(':' + IntToStr(de.dwDebugEventCode) + ':' + IntToStr(DE.Exception.ExceptionRecord.ExceptionCode));
case de.dwDebugEventCode of //
EXIT_PROCESS_DEBUG_EVENT:
begin
ShowMessage('Книга завершилась');
break;
end;
EXCEPTION_DEBUG_EVENT:
begin
if DE.Exception.ExceptionRecord.ExceptionCode=EXCEPTION_BREAKPOINT then
begin
cont.ContextFlags := CONTEXT_CONTROL or CONTEXT_INTEGER;
GetThreadContext(lppi.hThread,cont);
Memo1.Lines.Add(IntToHex(cont.eip, 8));
ContinueDebugEvent(DE.dwProcessId, DE.dwThreadId,DBG_CONTINUE);
end;
if DE.Exception.ExceptionRecord.ExceptionCode=EXCEPTION_SINGLE_STEP then
Begin
GetThreadContext(lppi.hThread,cont);
cont.EFlags:=cont.EFlags or $100;
setThreadContext(lppi.hThread,cont);
Memo1.Lines.Add('Трейсим:' + IntToHex(cont.eip, 8));
ContinueDebugEvent(lppi.dwProcessId, lppi.dwThreadid,DBG_CONTINUE);
end;
end;
end; // case
ContinueDebugEvent(DE.dwProcessId, DE.dwThreadId, DBG_EXCEPTION_NOT_HANDLED);
end;
[HIGHLIGHT=delphi][/HIGHLIGHT]




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

Создано: 18 октября 2006 09:46
· Личное сообщение · #2

Ты не так начинаешь отладку. Я делал вот как:
- CreareProcess(DEBUG_PROCESS | CREATE_SUSPENDED);
- вбиваешь breakpoin 0xCC в entry point
- ResumeThread()
- WaitForSingleObject()

и теперь можешь делать trace.




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

Создано: 18 октября 2006 10:14 · Поправил: Hellspawn
· Личное сообщение · #3

млять, для кого подсветку синтаксиса придумали не понятно

CreationFlags:
DEBUG_ONLY_THIS_PROCESS
NORMAL_PRIORITY_CLASS
CREATE_DEFAULT_ERROR_MODE


-----
[nice coder and reverser]




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

Создано: 18 октября 2006 10:51
· Личное сообщение · #4

Igit32, в WinXP SP-1 есть проблемка трассировки в глубинах системного кода. В частности, на SYSCALL с пднятым TF флагом Дебуг-АПИ затыкаются. Поэтому первый бряк надо ловить на EntryPoint, как s0larian говорит. У меня есть сорец трэйсера, который обходит ограничения XP SP-1, но на АСМе. Если надо найду и выложу (уже он проскакивал на форуме).

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




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

Создано: 18 октября 2006 11:06
· Личное сообщение · #5

AlexZ, выложи пожалуйста - посмотрю как там, чтобы потом вопросов небыло



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

Создано: 18 октября 2006 11:45
· Личное сообщение · #6

Вот. Библиотечка бп_инт3 была написана для других целей, но приспособил сюда же. Сорцы ДЛЛ где-то не знаю где, так что в дебугере смотри что она делает (в принципе понятно из названия и экспорта: запоминает байт на ЕР, фиксит на ИНТ_3 и т.п.). В общем, смотри...

0d7a_18.10.2006_CRACKLAB.rU.tgz - Traicer_by_AlexZ.zip

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




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

Создано: 18 октября 2006 12:08 · Поправил: Igit32
· Личное сообщение · #7

Спасибо всем. Действительно - оказалось нужно было бряк поставить на точку входа. Почему так - непонятно, но работает

AlexZ Пасиб, посмотрю




Ранг: 353.0 (мудрец)
Активность: 0.370
Статус: Участник
resreveR

Создано: 18 октября 2006 12:18
· Личное сообщение · #8

стало быть тема закрыта

-----
Тут не могла быть ваша реклама



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