вопрос syscall, Intel и compatibility mode

Тема в разделе "WASM.X64", создана пользователем rpy3uH, 12 сен 2010.

  1. rpy3uH

    rpy3uH New Member

    Публикаций:
    0
    Регистрация:
    14 сен 2006
    Сообщения:
    503
    Перечитал всю документацию (Intel). Везде написано что в режиме совместимости на интеловских процах инструкция syscall не поддерживается. Даже в описании SYSCALL ничего не сказано про MSR-регистр IA32_CSTAR. Но в этой же документации для инструкции SYSRET есть два опкода: для возврата в режим совместимости и в 64-битный режим (у него REX.W профикс). Как-то криво получается, из режима совместимости вызвать нельзя, а вернуться можно. На компе помимо 32-битной версии винды, стоит ещё и 64-битная (WinXP64), решил посмотреть как 32-битные проги вызывают системный сервис. Запустил OllyDebug, открыл процесс на отладку (кстати, он что-то глючит), в самом конце цепочки API функций стоит дальний прыжок с селектором 33, насколько я понял это прыжок на шлюз вызова. Писать программу переводящую процессор в long mode и моделирующую данную ситуацию вручную просто лень. Поэтому вопрос: всё-таки какие есть способы вызвать системный код в режиме совместимости? Пока я знаю только один способ который будет работать на Intel и AMD - через шлюз вызова.
     
  2. s_d_f

    s_d_f New Member

    Публикаций:
    0
    Регистрация:
    15 май 2008
    Сообщения:
    342
    А ты попробуй WinDbg. OllyDbg не может трасировать 64-битный код.
    Увидишь кое-что интересное.
    Переход происходит в сегмент 64-битного кода библиотеки wow64cpu.
     
  3. lhc645

    lhc645 New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2009
    Сообщения:
    106
    По поводу cstar и lstar можно почитать вот эту запись, там у меня довольно сырой, но все же реверс

    http://lhc645.wordpress.com/2009/09/07/вызов-системных-сервисов-в-winxp-x64-notes/

    также, здесь есть закрепленная тема по 32-х битные приложения под x64 (хотя с этим вы уже разобрались)

    http://wasm.ru/forum/viewtopic.php?id=37393

    Отсюда следует вывод, что cstar использовать нельзя, в винде это нереализовано.