Форум: "Начинающим";
Текущий архив: 2007.10.14;
Скачать: [xml.tar.bz2];
ВнизКак правильно вызывать INT 3 Найти похожие ветки
← →
Виктор007 (2007-09-20 21:41) [0]asm int 3; end;
если делаю так - программа вылетает. вызывается INT 3 а потом программа вылетает...
Как сделать чтобы не вылетала?
← →
Anatoly Podgoretsky © (2007-09-20 21:45) [1]> Виктор007 (20.09.2007 21:41:00) [0]
А сообщения в компиляторе не читаем?
← →
homm © (2007-09-20 21:47) [2]> [0] Виктор007 (20.09.07 21:41)
> если делаю так - программа вылетает
Я не знаю, для чег это прерывание использовалось в досе, но сейчас его очень удобно использовать для отладки :)
← →
Виктор007 (2007-09-20 21:51) [3]Да пишу обработчик для INT3, ну и тестирую драйвер попутно. То что программа вылетает мне не мешает, но все-же интересно из-за чего.
Когда запускаю под дельфи (па F9) то выполняется нормально, только Delphi ведет себя так буд-то я ставил точку останова на следующую команду после asm int 3; end;
А вот если без Delphi запускать - то вылетает.begin
Writeln("Test Driver HOOK IDT");
Writeln("Installing Driver...");
MyDriver := TDriver.Create;
MyDriver.DriverPath := "c:\HookIDT\objfre\i386\HookIDT.sys";
MyDriver.DriverName := "hookidt";
MyDriver.OpenDriver;
Writeln("Driver successfully installed...");
Writeln("Press Enter to Call INT3");
readln;
asm
int 3;
end;
Writeln("Done.");
Readln;
MyDriver.FreeDriver;
MyDriver.Free;
end.
← →
Ping (2007-09-20 21:52) [4]asm int 3; end;
если делаю так - программа вылетает
Как сделать чтобы не вылетала?
Убрать asm int 3; end;
← →
Виктор007 (2007-09-20 21:52) [5]Компилятор никаких Warning"ов не показывает
← →
homm © (2007-09-20 21:55) [6]> [3] Виктор007 (20.09.07 21:51)
> То что программа вылетает мне не мешает, но все-же интересно из-за чего.
Вот а в этом предложении, по моему скромному мнению, заложен глубочайший филосовский смысл :-)
← →
Виктор007 (2007-09-20 22:01) [7]
> homm © (20.09.07 21:55) [6]
>
> Вот а в этом предложении, по моему скромному мнению, заложен
> глубочайший филосовский смысл :-)
Не знаю как на счет философского смысла - но я не прочь лучше понять как работают многие вещи.
← →
homm © (2007-09-20 22:03) [8]> [7] Виктор007 (20.09.07 22:01)
> но я не прочь лучше понять как работают многие вещи.
В ты решил начать с драйверов? :)
← →
Виктор007 (2007-09-20 22:13) [9]С драйверов я не решил начать.
Драйвер уже написан и работает прекрасно, пишу защиту и реализовал что-то вроде наномитов в Armadillo. Все работает прекрасно - но на двуядерных процессорах не работает. Видимо там для каждого проца своя IDT, еще не разбирался. Вот и пишу маленький тестер драйвера, чтобы быстренько тестировать на разных конфигурациях.
Но вот программа почему-то вылетает на такой простой конструкции.
← →
oxffff © (2007-09-20 22:26) [10]Хе. хе
Interrupt 3—Breakpoint Exception (#BP)
Exception Class Trap.
Description
Indicates that a breakpoint instruction (INT 3) was executed, causing a breakpoint trap to be
generated. Typically, a debugger sets a breakpoint by replacing the first opcode byte of an
instruction with the opcode for the INT 3 instruction. (The INT 3 instruction is one byte long,
which makes it easy to replace an opcode in a code segment in RAM with the breakpoint
opcode.) The operating system or a debugging tool can use a data segment mapped to the same
physical address space as the code segment to place an INT 3 instruction in places where it is
desired to call the debugger.
With the P6 family, Pentium®, Intel486™, and Intel386™ processors, it is more convenient to
set breakpoints with the debug registers. (Refer to Section 15.3.2., “Breakpoint Exception
(#BP)—Interrupt Vector 3”, in Chapter 15, Debugging and Performance Monitoring, for information
about the breakpoint exception.) If more breakpoints are needed beyond what the debug
registers allow, the INT 3 instruction can be used.
The breakpoint (#BP) exception can also be generated by executing the INT n instruction with
an operand of 3. The action of this instruction (INT 3) is slightly different than that of the INT
3 instruction (refer to “INTn/INTO/INT3—Call to Interrupt Procedure” in Chapter 3 of the Intel
Architecture Software Developer’s Manual, Volume 2).
Exception Error Code
None.
Saved Instruction Pointer
Saved contents of CS and EIP registers point to the instruction following the INT 3 instruction.
Program State Change
Even though the EIP points to the instruction following the breakpoint instruction, the state of
the program is essentially unchanged because the INT 3 instruction does not affect any register
or memory locations. The debugger can thus resume the suspended program by replacing the
INT 3 instruction that caused the breakpoint with the original opcode and decrementing the
saved contents of the EIP register. Upon returning from the debugger, program execution
resumes with the replaced instruction.
← →
oxffff © (2007-09-20 22:29) [11]
> Все работает прекрасно - но на двуядерных процессорах не
> работает.
Значит драйвер написан не правильно.
Что за драйвер?
Знакомы ли вам слова IRQL, DRQL, spinlock?
Если нет - читаем DDK.
← →
Сергей М. © (2007-09-21 08:53) [12]
> А вот если без Delphi запускать - то вылетает
Абсолютно нормальная ситуация.
> пишу обработчик для INT3
Что-то не видно в твоем коде никаких "обработчиков" ..
> Как сделать чтобы не вылетала?
Написать корректный обработчик.
А причем тут драйвер - вообще непонятно
> Когда запускаю под дельфи (па F9) то выполняется нормально,
> только Delphi ведет себя так буд-то я ставил точку останова
> на следующую команду после asm int 3; end;
Это тоже объяснимое и нормальное поведение.
> пишу защиту
Отчего защищаешься ? От исследования кода под отладчиком ?
Почему бы не воспользоваться готовым инструментом защиты, скажем, Themida ? ПО, защищающее программные модули по этому алгоритму, конечно, не бесплатное, но оно реализует многоуровневую "эшелонированную оборону", включающую в т.ч. защиту от перехвата прерываний отладчиками режима ядра.
← →
umbra © (2007-09-21 10:55) [13]
> Когда запускаю под дельфи (па F9) то выполняется нормально,
> только Delphi ведет себя так буд-то я ставил точку останова
> на следующую команду после asm int 3; end;
>
Именно это и делает int 3. а поскольку в среде есть отладчик - то он останавливается на следуюющей команде. Без среды отладчика нет, программа не знает, что делать и умирает с горя :)
← →
Виктор007 (2007-09-21 19:48) [14]
>Сергей М. © (21.09.07 08:53) [12]
> Отчего защищаешься ? От исследования кода под отладчиком ?
Пишу диплом :)
> umbra © (21.09.07 10:55) [13]
> программа не знает, что делать и умирает с горя :)
А как повесить обработчик на int3 для себя же? и без драйвера, чтобы программа знала что делать и не умирала?
← →
Сергей М. © (2007-09-21 19:52) [15]
> Виктор007 (21.09.07 19:48) [14]
</I
>
> как повесить обработчик на int3 для себя же? и без драйвера
опа)
Наконец-то всплыывают любопытные подробности.
Стесняюсь спросить, а с какой луны в контекст диплома свалился тот самый "драйвер", нахрен он там вообще нужен, если, к примеру, в теме для диплома ring0 не фигурирует никаким боком ?
← →
Сергей М. © (2007-09-21 19:55) [16]
> Отчего защищаешься ?
> Пишу диплом
От злобного препода что-ли ?))))
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.10.14;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.03 c