Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.149.233.72] |
|
Сообщ.
#1
,
|
|
|
Почему при выполнение такого кода система виснет
_asm { INT 3 } Я знаю, что дело в прерывании, как это исправить? |
Сообщ.
#2
,
|
|
|
int 3 - это и есть выполнение прерывания 03h
во первых надо (обычно) записать в ax вектор функции, и еще кучу параметров в разные регистры (если надо) а во вторых что делает 3 прерывание? |
Сообщ.
#3
,
|
|
|
Цитата Kuss, 01.04.02, 10:48:36 int 3 - это и есть выполнение прерывания 03h во первых надо (обычно) записать в ax вектор функции, и еще кучу параметров в разные регистры (если надо) а во вторых что делает 3 прерывание? Да я так для примера написал, любой INT вызываешь со всякими ax, dx, al и т.д. и всё равно виснет. |
Сообщ.
#4
,
|
|
|
по моему под виндой подругому как-то надо, я пробовал когдато досовые прерывания в 32 разрядном приложении, тоже ничего не вышло.
|
Сообщ.
#5
,
|
|
|
Это конечно научный подход
Забить регистры всяким хламом, вызвать какое-нибудь прерывание и посмотреть, что будет. Замечательный стиль программирования. P.S. только без обид. Я долго угарал, прочитав ваши строчки. |
Сообщ.
#6
,
|
|
|
смешно, да, а люди мучаются.
|
Сообщ.
#7
,
|
|
|
Да, блин, затейники! Бедная винда не может справиться со всепоглощающим любопытством!
Сразу скажу из виндов прерывания вызывать можно и даже нужно в некоторых случаях, например с vxd-ками так и следует делать. Вот пытливый ум пишет в виндах int 13h, весело что-то набивает в регистры на входе. А что винда? Бесцеремонно посылает! Так вот int 13h (интерфейс BIOS для работы c дисками) находится в абсолютно другом измерении и такой вызов ничем не обоснован, винда еще тактична, что матом не посылает! В защищенном режиме при обработке инструкции int процессор находит соответствующий дескриптор в IDT (Interrupt Descriptor Table), а этот дескриптор описывает обработчик прерывания (исключения )защищенного режима, который и запускается для указанного прерывания (или исключения). IDT - одна из ключевых таблиц, которая создается при переходе в защищенный режим. Повторяю DOS-кие прерывания в другом измерении находятся. При работе в окне DOS, где DOS-приложения работают в режиме V86 для них все по-старому, почти. Эмулируется таблица векторов прерываний реального режима. Так что не стоит искушать судьбу и резвиться с прерываниями. В 99 случаев из 100 ничего не произойдет, конечно, но все равно не стоит. Итак, int 3. Что это такое в защищенном режиме? Программная контрольная точка, ловушка отладчика. На входе ничего нет. Обработчик этого прерывания просто PL-привередлив, поэтому не стоит удивляться на грубые отбивания винды от вашего насилования. Кстати, это прерывание использует CIH для входа в Ring0, но это отдельная история. А вот int 20h в Win9x имеет очень важное значение, через это прерывание организован интерфейс работы с vxd, ну а в DOS Вы помните, что оно значит... В виндах 9x обычно это выгладит так: int 20h DD ? где ? и есть вызываемый сервис vxd. ЗЫ: Не стоит шалить. Процесс познания - есть важный процесс, но это не наши методы! |
Сообщ.
#8
,
|
|
|
Добавлю следующее: int 3h имеет машинный код 0xCC , то есть таким кодом можно забить любую инструкцию (любой длины) и получить программный брейкпойнт. софтайс любит int 3h ))))))))))
|