Обработчик третьего прерывания.

Тема в разделе "WASM.UNIX", создана пользователем uighur, 18 янв 2007.

  1. uighur

    uighur New Member

    Публикаций:
    0
    Регистрация:
    10 янв 2007
    Сообщения:
    10
    Обрабаотчик третьего прерывания у меня выглядит вот так:
    Код (Text):
    1. void int03_handler(void) {
    2. printf("int 3 called!");
    3. __asm__ __volatile__("leave\n iret\n");
    Тип шлюза - 0xf(шлюз ловушки). Привелегии 3 ( возможен вызов с прикладнова уровня)
    При попытке отладить прогу gdb получаю вот что:
    Код (Text):
    1. (gdb) break main
    2. Breakpoint 1 at 0x080484d2
    3. (gdb) run
    4. Starting program:/home/uighur/t
    5. int 3 called!
    6.  
    7. Program reseived signal SIGSEGV, Segmentation fault.
    8. 0x00000000 ??()
    9. (gdb)
    ОС-FreeBSD 5.5.
    Как сделать что бы после вызова обработчика управление передавалось туда, где и была команда int3?
     
  2. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    Зачем leave? Простого iret не хватает?
     
  3. Bob

    Bob New Member

    Публикаций:
    0
    Регистрация:
    2 авг 2004
    Сообщения:
    112
    Адрес:
    Ukraine
    FreeBSD я не знаю.
    Вот пример похожего модуля для Linux.
    Тестировал на 2.6.18.4 ядре. Нормально работает,
    систему не роняет, все что надо перехватывает.
     
  4. uighur

    uighur New Member

    Публикаций:
    0
    Регистрация:
    10 янв 2007
    Сообщения:
    10
    Мне нужен модуль который бы перехватывал int3 и не передавал бы управление на прежний обработчик.