На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Перед отправкой сообщения внимательно прочтите правила раздела!!!
1. Запрещается обсуждать написание вирусов, троянов и других вредоносных программ!
2. Помните, что у нас есть FAQ раздела Assembler и Полезные ссылки. Посмотрите, возможно, там уже имеется решение вашего вопроса.

3. Настоятельно рекомендуем обратить особое внимание на правила форума, которые нарушаются чаще всего:
  3.1. Заголовок темы должен кратко отражать её суть. Темы с заголовками типа "Срочно помогите!" или "Ассемблер" будут отправляться в Корзину для мусора.
  3.2. Исходники программ обязательно выделяйте тегами [code]...[/code] (одиночные инструкции можно не выделять).
  3.3. Нежелательно поднимать старые темы (не обновлявшиеся более года) без веской на то причины.

Не забывайте также про главные Правила форума!

Добро пожаловать и приятного вам общения!!! ;)
 
Модераторы: Jin X, Qraizer
  
> ASM
    Почему при выполнение такого кода система виснет

    _asm
    {
       INT 3
    }

    Я знаю, что дело в прерывании, как это исправить?
      int 3 - это и есть выполнение прерывания 03h
      во первых надо (обычно) записать в ax вектор функции, и еще кучу параметров в разные регистры (если надо)
      а во вторых что делает 3 прерывание?
        Цитата Kuss, 01.04.02, 10:48:36
        int 3 - это и есть выполнение прерывания 03h
        во первых надо (обычно) записать в ax вектор функции, и еще кучу параметров в разные регистры (если надо)
        а во вторых что делает 3 прерывание?


        Да я так  для примера написал, любой INT вызываешь со всякими ax, dx, al и т.д. и всё равно виснет.
          по моему под виндой подругому как-то надо, я пробовал когдато досовые прерывания в 32 разрядном приложении, тоже ничего не вышло.
            Это конечно научный подход :)
            Забить регистры всяким хламом, вызвать какое-нибудь прерывание и посмотреть, что будет.
            Замечательный стиль программирования.
            P.S. только без обид. Я долго угарал, прочитав ваши строчки. :)
              смешно, да, а люди мучаются. :)
                Да, блин, затейники! Бедная винда не может справиться со всепоглощающим любопытством!

                Сразу скажу из виндов прерывания вызывать можно и даже нужно в некоторых случаях, например с 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.

                ЗЫ: Не стоит шалить. Процесс познания - есть важный процесс, но это не наши методы!
                Сообщение отредактировано: rivitna -
                  Добавлю следующее: int 3h имеет машинный код 0xCC , то есть таким кодом можно забить любую инструкцию (любой длины) и получить программный брейкпойнт. софтайс любит int 3h :)))))))))))
                  0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                  0 пользователей:


                  Рейтинг@Mail.ru
                  [ Script execution time: 0,0259 ]   [ 15 queries used ]   [ Generated: 27.04.24, 08:30 GMT ]