Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

обращение к отладочным регистрам [D7, WinXP]


Страницы:   1 2

tar4 ©   (2006-08-28 07:15:00) 

Известно, что прямое обращение к отладочным регистрам из ring-3 вызывает общую ошибку защиты. Ниже приведен кусок кода. Подскажите, почему у меня НЕ ВОЗНИКАЕТ ошибка?  

var
STi:TSTARTUPINFO;          //информация для запуска
PI:PROCESS_INFORMATION; //информация о процессе
state:Context;
BreakNum:byte;
Begin
BreakNum:=0;
if not CreateProcess(nil,szFileName,nil,nil,false, CREATE_SUSPENDED, nil,nil,STi,PI)  then  Exit;
State.ContextFlags:= CONTEXT_DEBUG_REGISTERS or CONTEXT_FULL;
GetThreadContext(pi.hThread,State);  //читаем контекст потока
State.Dr0:=$401d48;     //в dr0 -адрес EP запускаемой программы
State.Dr7:=1 shl BreakNum;  //в 0-й бит пишем 1, HwE
State.ContextFlags:= CONTEXT_DEBUG_REGISTERS or CONTEXT_FULL;
SetThreadContext(pi.hThread,State); //пишем изм в контекст
   ResumeThread(pi.hThread);            //запускаем прогу
   CloseHandle(PI.hThread);
   closehandle(pi.hprocess);
end;


tar4   (2006-08-28 15:05:00) [1]

Ketmar,Сергей М
Спасибо за консультации.


Сергей М.   (2006-08-28 15:02:00) [2]


> tar4   (28.08.06 14:45) [31]


Прекращай заниматься херней и излагай подробно свое ТЗ.
Тогда и будут конкретные рекомендации.
А сейчас ты занят тем, чем занят сапожник, замещающий пирожника.


Ketmar   (2006-08-28 14:51:00) [3]

> [31] tar4   (28.08.06 14:45)
собственно, оно есть, но ещё не запущено. отдыхает в ливере виндов. протрассировать до возврата из виндовых dll -- и тогда цепляться.


tar4   (2006-08-28 14:45:00) [4]


> Ну, наверно, следует запустить еще один экз-р OllyDbg, снять
> в нем отладочную опцию использования аппаратных брейкпойнтов
> и выполнить аттач к стартованному тобой порожденному процессу.
>

Я нечто подобное делал, только не в OllyDbg. Запускал 1-й процесс в Дельфи, тормозил его после CreateProcess и искал 2-й процесс в списке процессов (через LOrdPE); его там не было. Сейчас попробывал сделать,
то что ты написал в OllyDbg. Отладчик "не видит" 2-й процесс до тех пор, пока не пройдешь ResumeThread. Тогда как присоединится к тому чего еще нет?


Сергей М.   (2006-08-28 14:16:00) [5]


> tar4   (28.08.06 14:11) [29]


> что-то вроде этого


Ясно. Еще один велосипед)


> как можно
> установить аппаратный бряк в контексте запускаемой программы


Примерно так и установить.
Но к OllyDbg это не имеет отношения - он это умеет делать, причем весьма грамотно, как и многие другие не самые простые вещи, касаемые дебага.


tar4   (2006-08-28 14:11:00) [6]


> Ты чего сотворяешь-то ? Отладчик что ли ?)

Ну, что-то вроде этого.

> если ты снимаешь с чего-то защиту, то опять же это лучше делать без DRx
> загрузи, распакуй, пропатчи, запускай.

Да знаю я это. Ребята, посмотрите в название топика. Мы же вроде не обсуждаем методы отладки программ. Подскажите, если знаете, как можно
установить аппаратный бряк в контексте запускаемой программы.


Ketmar   (2006-08-28 13:53:00) [7]

> [26] Сергей М. ©   (28.08.06 13:50)
есть подозрение, что то ли cheater для игрушки, то ли loader для какой-то защищённой системы. если последнее, то автору лучше не признаваться. %-)


Ketmar   (2006-08-28 13:52:00) [8]

> [25] tar4   (28.08.06 13:44)
а почему бы и да? вполне нормальные методы. а если ты снимаешь с чего-то защиту, то опять же это лучше делать без DRx. загрузи, распакуй, пропатчи, запускай.


Сергей М.   (2006-08-28 13:50:00) [9]


> tar4   (28.08.06 13:44) [25]


Ты чего сотворяешь-то ? Отладчик что ли ?)


tar4   (2006-08-28 13:44:00) [10]


> нужно научиться приостанавливать выполнения запущенного
> потокаи зачем тут DRx

А как у тебя предложения. Int3 ($CC) на 1 байт адреса? Или SuspendThread
по таймеру?


Ketmar   (2006-08-28 13:28:00) [11]

> [21] tar4   (28.08.06 13:18)
> нужно научиться приостанавливать выполнения запущенного потока
и зачем тут DRx?


tar4   (2006-08-28 13:28:00) [12]


> Что за "ЕР" ?

Забыл, ЕР - Entry Point 2-го процесса.


Сергей М.   (2006-08-28 13:26:00) [13]


> в текущей сессии OllyDbg я не могу посмотреть запускаемый
> процесс. А как быть?


Ну, наверно, следует запустить еще один экз-р OllyDbg, снять в нем отладочную опцию использования аппаратных брейкпойнтов и выполнить аттач к стартованному тобой порожденному процессу.


tar4   (2006-08-28 13:18:00) [14]


> всё раздумывал, зачем DRx используются. теперь кристалльно
> ясно. необходимость именно такого подхода пояснена чётко
> и доступно.

К чему ирония? Что ты еще хочешь узнать? Хочу написать загрузчик.
Для этого мне нужно научиться приостанавливать выполнения запущенного потока. Разве этого не достаточно? Почему не хочу использовать debug Api - так это тема для другого разговора.


>  а DR при этом модифицируешь совсем в другом потоке совсем
> другого процесса, т.е. вовсе не того, который ты отлаживаешь
> в тек.сессии OllyDbg

Но ведь  я получаю Context контекст запущенного потока
GetThreadContext(pi.hThread,State);  //читаем контекст потока
И в этом контексте меняю DR0
State.Dr0:=$401d48;    
Получается, что в текущей сессии OllyDbg я не могу посмотреть запускаемый процесс. А как быть?


Сергей М.   (2006-08-28 12:54:00) [15]


> tar4   (28.08.06 12:42) [18]


> $401d48 - это ЕР


Что за "ЕР" ?


> 1-й процесс я
> и загружал в OllyDbg


угу ... а DR при этом модифицируешь совсем в другом потоке совсем другого процесса, т.е. вовсе не того, который ты отлаживаешь в тек.сессии OllyDbg

)


Ketmar   (2006-08-28 12:48:00) [16]

> [18] tar4   (28.08.06 12:42)
> Мне надо загрузить другой процесс и поставить где-нибудь
> в секции кода (пока не важно где) аппаратный бряк. При этом
> не используя Debug API.

а я сразу и не догадался. всё раздумывал, зачем DRx используются. теперь кристалльно ясно. необходимость именно такого подхода пояснена чётко и доступно.


tar4   (2006-08-28 12:42:00) [17]


> Сергей М

Извини, я как-то случайно пропустил твой вопрос. Есть  1-й процесс,
из которого запускается "2 процесс" через CreateProcess. 1-й процесс я
и загружал в OllyDbg.
$401d48 - это ЕР 2-го процесса, взят просто из отладчика при загрузке в него 2-го процесса. Вообщем, я догадываюсь, что здесь вероятно ошибка.


> может, всё-таки внятно пояснишь, зачем оно тебе? глядишь,
>  придумаем чего.

Мне надо загрузить другой процесс и поставить где-нибудь в секции кода (пока не важно где) аппаратный бряк. При этом не используя Debug API.


Сергей М.   (2006-08-28 12:23:00) [18]


> tar4


Вот эта вот цифирь

$401d48

она откуда взялась ? В АП какогопроцесса она фигурирует ?


Ketmar   (2006-08-28 12:21:00) [19]

или, может, всё-таки внятно пояснишь, зачем оно тебе? глядишь, придумаем чего.


Ketmar   (2006-08-28 12:21:00) [20]

> [13] tar4   (28.08.06 12:16)
расслабься. оно того не стоит.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо