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

Discussion in 'WASM.UNIX' started by uighur, Jan 18, 2007.

  1. uighur

    uighur New Member

    Blog Posts:
    0
    Joined:
    Jan 10, 2007
    Messages:
    10
    Обрабаотчик третьего прерывания у меня выглядит вот так:
    Code (Text):
    1. void int03_handler(void) {
    2. printf("int 3 called!");
    3. __asm__ __volatile__("leave\n iret\n");
    Тип шлюза - 0xf(шлюз ловушки). Привелегии 3 ( возможен вызов с прикладнова уровня)
    При попытке отладить прогу gdb получаю вот что:
    Code (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

    Blog Posts:
    0
    Joined:
    Jun 5, 2004
    Messages:
    4,336
    Location:
    Russia
    Зачем leave? Простого iret не хватает?
     
  3. Bob

    Bob New Member

    Blog Posts:
    0
    Joined:
    Aug 2, 2004
    Messages:
    112
    Location:
    Ukraine
    FreeBSD я не знаю.
    Вот пример похожего модуля для Linux.
    Тестировал на 2.6.18.4 ядре. Нормально работает,
    систему не роняет, все что надо перехватывает.
     
  4. uighur

    uighur New Member

    Blog Posts:
    0
    Joined:
    Jan 10, 2007
    Messages:
    10
    Мне нужен модуль который бы перехватывал int3 и не передавал бы управление на прежний обработчик.