|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Ноя 19, 2003 14:20:02 Экспериментировал сегодня ночью с DRx регистрами, и попробовал поставить брейкпоинт не на выполнение, а на чтение/запись данных, засылаю в DR7 0xFFFF0155 - нихрена, брейкпоинт не срабатывает. Как я только не извращался с DR7 - ничего не помогает. Может кто знает, как поставить брейкпоинт на это дело? З.Ы. Все дело происходит в ринг3 |
|
|
Дата: Ноя 19, 2003 17:51:26 А просто 0x155? |
|
|
Дата: Ноя 19, 2003 17:52:28 Да, кстати, на DR7 в кольце-0 накладывается маска. Так что ты особо не повыпендриваешься! Проверь мою статью - код NtContinue - я уже подзабыл... |
|
|
Дата: Ноя 20, 2003 14:56:21 volodya А просто 0x155? Нее, это будет брейкпоинт на execute, а я пытался поставить брейкпоинт на чтение/запись. По любому, спасибо за участие, а то такое ощущение (ложное конечно :)), что тут этим никто не занимался... Поборол я эту проблему сегодня ночью, все оказалось до банального просто - вы будете смеяться, но писал я это дело на Делфях :), так вот его отладчик просто не сообщает отлаживаемой программе о таких брейкпоинтах, а игнорирует их. Если запускать файло не под отладчиком, то все окей. Обнаружил интересную фичу - есть типа псевдокод:
TestVar dd ?
...
@TestLabel:
nop
...
mov dr0,offset TestVar
mov dr1,offset @TestLabel
mov dr7,00030105h
...
mov TestVar,12345678h
jmp @TestLabel
Т.е. устанавливается Read/Write брейкпоинт на TestVar, и Execute брейкпоинт на TestLabel. Так вот, при срабатывании первого (Read/Write) брейкпоинта в контексе нити Eip равно адресу следующей команда после mov TestVar,12345678h, и переменная TestVar содержит 12345678h. При выполнении второго (Execute) брейкпоинта, Eip в контексе указывает на инструкцию nop. Таким образом получаем, что Execute брейкпоинт срабатывает до выполнения инструкции nop, а Read/Write брейкпоинт срабатывает после выполнения инструкции mov TestVar,12345678h !!! Я конечно не настаиваю, до думал, что все брейкпоинты должны вызываться до инструкции, вызвавшей брейкпоинт... а получается, что это не так 8| Может кто нибудь прокомментировать ситуацию??? |
|
|
Дата: Ноя 20, 2003 17:11:46 · Поправил: Four-F Цитаты из "IA-32 Intel Architecture Software Developer’s Manual Volume 3 : System Programming Guide" 14.3.1.1. INSTRUCTION-BREAKPOINT EXCEPTION CONDITION Debug or Breakpoint Condition DR6 Flags Tested DR7 Flags Tested Exception Class Instruction breakpoint, at Bn = 1 and R/Wn = 0 Fault addresses defined by DRn and LENn (GEn or LEn = 1) Data write breakpoint, at Bn = 1 and R/Wn = 1 Trap addresses defined by DRn and LENn (GEn or LEn = 1)5.3. EXCEPTION CLASSIFICATIONS Faults A fault is an exception that can generally be corrected and that, once corrected, allows the program to be restarted with no loss of continuity. When a fault is reported, the processor restores the machine state to the state prior to the beginning of execution of the faulting instruction. The return address (saved contents of the CS and EIP registers) for the fault handler points to the faulting instruction, rather than the instruction following the faulting instruction. Traps A trap is an exception that is reported immediately following the execution of the trapping instruction. Traps allow execution of a program or task to be continued without loss of program continuity. The return address for the trap handler points to the instruction to be executed after the trapping instruction. |
|
|
Дата: Ноя 20, 2003 17:29:04 Four-F Черт! А ведь именно эту таблицу я смотрел где-то часиков в пять утра, но видно соображалка уже не работала :). Спасибо!!! |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.112 |