Как выйти из callgate ?

Тема в разделе "WASM.NT.KERNEL", создана пользователем Velheart, 18 сен 2008.

  1. Velheart

    Velheart New Member

    Публикаций:
    0
    Регистрация:
    2 июн 2008
    Сообщения:
    526
    Собственно такая штука: создаю callgate-дескриптор, успешно вызываю из юзермода фарколом, а после хочу вернуться назад, но никакие штуки типа ret, iret, sysexit не работают, ну т.е. они не вызывают бсода, но и управления не возвращают, может кто-нибудь поделится ссылкой или в двух словах расскажет что происходит при фарколе: сохраняется cs:eip и все? т.е. чтобы вернуться надо "настроить" юзермодный стек под iret, как в KiCallUserMode--KiServiceExit?
     
  2. blast

    blast New Member

    Публикаций:
    0
    Регистрация:
    8 мар 2008
    Сообщения:
    170
    IRETD
     
  3. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    blast
    iretd нужна чтобы выйти из обработчика прерывания (в стеке должны находиться [ss:esp], eflags, cs:eip. ss:esp нужны в том случае, если при переходе на обработчик прерывания произошла смена уровня привелегий).

    Velheart
    Команда возврата из шлюза вызова -- far ret, или retf. При вызове через callgate в стеке обязательно сохраняются cs:eip и опционально копируются параметры вызова (количество указывается в шлюзе вызова).

    Почитать можно в томе 3А Intel Manual.
     
  4. Velheart

    Velheart New Member

    Публикаций:
    0
    Регистрация:
    2 июн 2008
    Сообщения:
    526
    не, iretd не работает тоже, кстати код генерируется такой же как и для iret
     
  5. Velheart

    Velheart New Member

    Публикаций:
    0
    Регистрация:
    2 июн 2008
    Сообщения:
    526
    Mika0x65
    сенкс, буду пробовать =)