Вниз
Скачать: CL | DM;

Как правильно вызывать 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 вся ветка

Скачать: CL | DM;



Память: 0.49 MB
Время: 0.016 c
15-1189611670
StasFomin
2007-09-12 19:41
2007.10.14
TListView с сортировкой


2-1189699967
ММК
2007-09-13 20:12
2007.10.14
Файлы


15-1190041249
Cyrax
2007-09-17 19:00
2007.10.14
7-Zip: чем написан ?


2-1189951828
Serega99
2007-09-16 18:10
2007.10.14
sleep( )


2-1190240140
Corel
2007-09-20 02:15
2007.10.14
Message




   Наверх