регистр DS в обработчике прерывания

Тема в разделе "WASM.NT.KERNEL", создана пользователем katrus, 22 мар 2009.

  1. katrus

    katrus New Member

    Публикаций:
    0
    Регистрация:
    7 мар 2007
    Сообщения:
    612
    Столкнулся с забавной проблемой, решить которую не могу. Есть хук обработчика прерывания. в конце он делает jmp real_interrupt_handler, где real_interrupt_handler - переменная содержащая указатель на настоящий обработчик прерывания. Проблема в том, что когда прерывание проишодит в контексте 16 битного приложения, регистр DS != 23 и real_interrupt_handler находится неизветно где. Чем бы можно заменить этот jmp?
     
  2. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    А загрузить нужный DS не судьба?
     
  3. katrus

    katrus New Member

    Публикаций:
    0
    Регистрация:
    7 мар 2007
    Сообщения:
    612
    А кто его вернет к исходному значению после jmp?
     
  4. katrus

    katrus New Member

    Публикаций:
    0
    Регистрация:
    7 мар 2007
    Сообщения:
    612
    Придумал! push+ret
     
  5. diamond

    diamond New Member

    Публикаций:
    0
    Регистрация:
    21 май 2004
    Сообщения:
    507
    Адрес:
    Russia
    jmp [cs:real_interrupt_handler]
     
  6. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    diamond
    Прав, именно так и делается.
     
  7. SashaTalakin

    SashaTalakin New Member

    Публикаций:
    0
    Регистрация:
    15 дек 2008
    Сообщения:
    261
    katrus , что ты скажешь на то что твой хук не будет работать на х64 системах?
     
  8. katrus

    katrus New Member

    Публикаций:
    0
    Регистрация:
    7 мар 2007
    Сообщения:
    612
    Скажу, что, в данной, конкретной ситуации мне монопенисуально.