Посл.ответ |
Сообщение |
Ранг: 11.9 (новичок), 1thx Активность: 0.01↘0 Статус: Участник
|
Создано: 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.17↘0 Статус: Участник системщик
|
Создано: 18 октября 2006 09:46 · Личное сообщение · #2
Ты не так начинаешь отладку. Я делал вот как:
- CreareProcess(DEBUG_PROCESS | CREATE_SUSPENDED);
- вбиваешь breakpoin 0xCC в entry point
- ResumeThread()
- WaitForSingleObject()
и теперь можешь делать trace.
| Сообщение посчитали полезным: |
 Ранг: 990.2 (! ! !), 380thx Активность: 0.68↘0 Статус: Модератор 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.22↘0 Статус: Участник 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.01↘0 Статус: Участник
|
Создано: 18 октября 2006 11:06 · Личное сообщение · #5
AlexZ, выложи пожалуйста - посмотрю как там, чтобы потом вопросов небыло
| Сообщение посчитали полезным: |
Ранг: 203.3 (наставник) Активность: 0.22↘0 Статус: Участник 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.01↘0 Статус: Участник
|
Создано: 18 октября 2006 12:08 · Поправил: Igit32 · Личное сообщение · #7
Спасибо всем. Действительно - оказалось нужно было бряк поставить на точку входа. Почему так - непонятно, но работает
AlexZ Пасиб, посмотрю
| Сообщение посчитали полезным: |
 Ранг: 353.0 (мудрец) Активность: 0.37↘0 Статус: Участник resreveR
|
Создано: 18 октября 2006 12:18 · Личное сообщение · #8
стало быть тема закрыта
----- Тут не могла быть ваша реклама | Сообщение посчитали полезным: |