Переопределение прерываний

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

  1. ramzai

    ramzai New Member

    Публикаций:
    0
    Регистрация:
    15 апр 2007
    Сообщения:
    2
    Буду очень благодарен, если кто-нибудь ткнет в хауту или что-нибудь похожее, чтобы посмотреть, как можно сделать то же, что и
    Код (Text):
    1.     .model tiny
    2.     .code
    3.     org 100h
    4. begin: 
    5.     jmp install
    6. new_60h:
    7.     ; do smth
    8.     iret
    9. install:
    10.     mov ax, 2560h
    11.     lea dx, new_60h
    12.     int 21h
    13.     lea dx, install
    14.     int 27h
    15. end begin
    для DOS. И где можно посмотреть список прерываний под *nix - кроме 80h?

    Вообще, то что я вижу про демонов - в Linux Daemon HowTo, например, с циклом while(1){} как-то не очень похоже на те резидентные DOS-программы...

    Заранее спасибо.
     
  2. ShadOS

    ShadOS New Member

    Публикаций:
    0
    Регистрация:
    20 сен 2006
    Сообщения:
    39
    Адрес:
    0x48k
    Список сисколов: /usr/include/asm/unistd.h
    Не знаю как с асм, а с перехватом сисколов всё просто. На opennet полно документации.
     
  3. ramzai

    ramzai New Member

    Публикаций:
    0
    Регистрация:
    15 апр 2007
    Сообщения:
    2
    C системными вызовами (которые по int $0x80) я разобрался, вопрос в том, могу ли я создать свое юзерное прерывание (как в DOSe - 60h)? А в идеале, когда я захочу переопределить прерывание от клавиатуры (для кейлоггера, например) - это делается через системные вызовы, а не через прерывания?

    Роюсь в опеннете...
     
  4. ShadOS

    ShadOS New Member

    Публикаций:
    0
    Регистрация:
    20 сен 2006
    Сообщения:
    39
    Адрес:
    0x48k
    Могу сказать точно, что через сисколы это делается и мы это делали. Смотри руткит itx от нашей HellKnightsCrew. Там всё более чем подробно расписанно.
     
  5. _ir4_Y_

    _ir4_Y_ New Member

    Публикаций:
    0
    Регистрация:
    8 мар 2007
    Сообщения:
    76
    ну через системные вызовы можно сделать конечно но имхо переписывание прерываний дает нечто гораздо большее :) А чтобы переписать прерывание надо знать адрес таблицы прерываний и изменить его что в досе делает 25 функция, а как это делать в никсах я хз пока сща сам разбираюсь ...
     
  6. gilg

    gilg New Member

    Публикаций:
    0
    Регистрация:
    19 май 2005
    Сообщения:
    527
    Какая собственно разница, какая ОСь установлена, для перехвата прерываний? Никсы работают в протектед-моде, соответственно открываем Intel Data-sheet и курим прерывания в защищенном режиме. Для перехвата надо установить свой interrupt gate и код здесь будет что для линуха, что для виндов по сути один и тот же
     
  7. ShadOS

    ShadOS New Member

    Публикаций:
    0
    Регистрация:
    20 сен 2006
    Сообщения:
    39
    Адрес:
    0x48k
    а ну ну... посмотрим как это заработает ;)
     
  8. gilg

    gilg New Member

    Публикаций:
    0
    Регистрация:
    19 май 2005
    Сообщения:
    527
    ShadOS
    Заинтриговал...
     
  9. _ir4_Y_

    _ir4_Y_ New Member

    Публикаций:
    0
    Регистрация:
    8 мар 2007
    Сообщения:
    76
    2gilg ну давай приведи пример такого кода чтоб и под винду и под никсы переписывал прерывания :):):)
     
  10. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    _ir4_Y_
    да элементарно
    Код (Text):
    1. idt_replace_handler:
    2. ; EAX contains number of interrupt [0, 256), EDX contains address of new handler
    3.     push ebx
    4.     sidt [esp - 6]
    5.     mov ebx, [esp - 4]
    6.     lea ebx, [ebx + eax * 8]
    7.     pushfd
    8.     cli
    9.     mov word [ebx], dx
    10.     shr edx, 16
    11.     mov word [ebx + 6], dx
    12.     popfd
    13.     pop ebx
    14.     ret
    различным для Linux и Windows будет только загрузка сего кода в ядро