Виртуальная машина(частичная эмуляция процессора)

Тема в разделе "WASM.OS.DEVEL", создана пользователем FromNowhere, 14 авг 2007.

  1. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    FromNowhere
    то есть палится?
    если ставишь TF, то генерится int01, в его обработчике проверяй операции с регистром флагов, и подменяй если требуется.
     
  2. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    rei3er
    Так нам нужно всего на всего подправить CS,DC,ES и др в момент когда идет их загрузка выгрузка. Нужно всего навсего отследить только те команды которые работают с этими регистрами
    mov , push pop команды.

    Можно через TF перехватывать, EFLAG тоже можено перехватить. А можно эмулировать. Момент перехода в 0 кольцо мы можем отследить по спец командам.
     
  3. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    ну а если так
    Код (Text):
    1. ...
    2.     pushfd
    3.     nop
    4.     nop
    5.     nop
    6.     mov eax, esp
    7.     mov eax, dword [eax] ; вот тут EFLAGS палится и ничего не сделаешь
    8. ...
     
  4. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    ну хорошо, как ты тут определишь, что идет проверка CPL
    Код (Text):
    1.     mov eax, cs
    2.     and eax, 3
    3.     test eax, eax
    4. ...
     
  5. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    если выполнили pushfd инструкцию, то заменяем слово по [esp]. И всё.
     
  6. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    n0name
    хотя да, резонно
    в принципе это решение
     
  7. FromNowhere

    FromNowhere New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2007
    Сообщения:
    23
  8. FromNowhere

    FromNowhere New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2007
    Сообщения:
    23
  9. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    FromNowhere
    Не не съест. Большая часть программ выполняется на 3 кольце, а для него TF не нужен.
    Поэтому подение будет не столь значительным.
     
  10. FromNowhere

    FromNowhere New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2007
    Сообщения:
    23
  11. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    FromNowhere
    Так мы код третьего кольца будем выполнять на третьем кольце.
    Второго на втором
    Первого на первом.
    Нуливого на первом, отличать будем по вызову привилегированных команд, которые должны переводить проц на нуливое кольцо. А тут уже вход будет идти TF.
     
  12. FromNowhere

    FromNowhere New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2007
    Сообщения:
    23
  13. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    одно дело вирт машина, другое эмулятор.
    думаю на bochs как раз и будет раз в 10-15 замедление. а VMWare он не эмулирует инструкции процессора AFAIK, а только железо.
    дык в это 1ое кольцо надо еще перейти, вот при переходе и поставим TF.
     
  14. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    да
    bochs чистый эмулятор
    иначе как там построена отладка и прочие фичи
     
  15. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    а как быть с 16-ти битным кодом реального режима
    если не эмулировать, то #UD может как возникнуть, так и не возникнуть
     
  16. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    n0name
    Если знаешь ответ как работает Виртуальная машина опиши. При этом нужно перехватывать системные вызовы в нуливом кольце. А без подмены на первое кольцо я выхода не вижу. (Врасчет не берем тихнологии виртуализации)

    Как работает, VMWare я незнаю. Но почемуто мне больше кажется, что на 0 кольце она дизассемблирует код подпровляет где надо и передает управление. Надо проверить вот только как? (Помойму она ловиться на патчинге кода в нуливом кольце, в реальных машинах начиная с pentium стоит защита на кэше)

    FromNowhere
    Если "mov ax,cs" выполняется на 1 кольце и пусть выполняется, нам это не угрожает. Там cs, будет таким каким должен быть.

    rei3er
    Так для этого есть VM86. =)
     
  17. FromNowhere

    FromNowhere New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2007
    Сообщения:
    23
  18. FromNowhere

    FromNowhere New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2007
    Сообщения:
    23
  19. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    я так понял при переходе из RING3 мы устанавливааем TF как раз для того, чтобы контролировать все инструкции
    т. к переход на менее привелигерованный уровень - это инструкции iretd, retf
    вот их мы и будем проверять (а именно селектор CS в стеке)
    что-то мне кажется, что это будет большой геморрой :)
     
  20. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    FromNowhere
    Это для нуливого кольца он должен быть 0, а для первого 1.
    Вот поэтому для нуливого и проверяем, а для первого не проверяем просто ставим равным 1.


    PS. Предлогая всем к завтрому, может не к завтрому написать свои виртуальные маши. А потом посмотрим что получилось.