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;


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


> tar4   (28.08.06 12:16) [13]


Ты не ответил на вопрос [7]


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


> Для изобретателей велосипедов:

Я читал это.

> судя по всему, охота именно DRx. зачем -- не ясно, но охота
> пуще неволи.

В данном случае речь идет только об возможности установки аппаратного
бряка, например, в DR0 без использования флага "DEBUG_PROCESS" в CreateProcess и функции WaitForDebugEvent.


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

> [11] Сергей М. ©   (28.08.06 11:27)
судя по всему, охота именно DRx. зачем -- не ясно, но охота пуще неволи.


Сергей М.   (2006-08-28 11:27:00) [24]


> tar4   (28.08.06 11:26) [10]


Для изобретателей велосипедов:

http://www.wasm.ru/article.php?article=1001030


tar4   (2006-08-28 11:26:00) [25]


> для начала ошибка -- это отлаживать подобный код под OllyDbg.

Ты считаешь, что надо пользоваться СофтАйсом, почему?  Ведь OllyDbg позволяет ставить и снимать аппаратные бряки. И еще. Ведь установку
бряка, например в dr0,  можно контролировать и косвенно, при трассировке
в Дельфи, по состоянию регистра dr6.


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

> [8] tar4   (28.08.06 11:05)
для начала ошибка -- это отлаживать подобный код под OllyDbg.


tar4   (2006-08-28 11:05:00) [27]


> помедитируй. подумай, достаточно ли этого, если ты "ничего
> не видишь"?

Чего говоришь загадками? Если ты о состоянии регистров dr0 и dr7, то
я их состояние контролировал, если о чем-то другом - то выразись ясней. Я знаю, что где-то ошибка и если бы понимал, где ее искать - не спрашивал бы на форуме.


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


> tar4   (28.08.06 10:38) [5]


Так ты какой процесс-то рассматриваешь под OllyDbg  ?


Ketmar   (2006-08-28 10:47:00) [29]

> [5] tar4   (28.08.06 10:38)
помедитируй. подумай, достаточно ли этого, если ты "ничего не видишь"?


tar4   (2006-08-28 10:38:00) [30]


>  каком отладчике-то ? Уж не во встроенном ли в Делфи !?

В OllyDbg

> ты что-то куда-то выводил? не замечаю.

Не понял, что значит выводил? А то, что я меняю состояние 0 и 7-го регистров, это не достаточно?


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

а кто тебе сказал, что ты должен что-либо увидеть? ты что-то куда-то выводил? не замечаю.


Сергей М.   (2006-08-28 09:49:00) [32]

В каком отладчике-то ? Уж не во встроенном ли в Делфи !?


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


>  некий момент там вызывается прогр.прерывание 2Eh.

Я это видел. Но почему тогда я не вижу в отладчике установленного бряка.


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

А с чего ты взял, что обращение к DR в твоем случае происходит именно в ring3 ?
Imho, система осуществляет управление контекстом потока не иначе как в режиме ядра, в который происходит переключение в момент выполнения ф-ции Get/SetThreadContext..

Пройдись дебагером по потрохам ф-ции SetThreadContext пошагово и убедись, что в некий момент там вызывается прогр.прерывание 2Eh.


Страницы:   1 2

Наверх

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