Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.5 MB
Время: 0.052 c
15-1189955101
master_asasin
2007-09-16 19:05
2007.10.14
Подключение


15-1189604306
wvalera
2007-09-12 17:38
2007.10.14
FastMM


1-1185835897
dimaL
2007-07-31 02:51
2007.10.14
Размеры колонок в StringGrid


2-1190098194
artem779
2007-09-18 10:49
2007.10.14
проблема с *.INI


15-1189617278
Vlad Oshin
2007-09-12 21:14
2007.10.14
Подключение на основе сверхзвуковой ударной волны





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский