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

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

  1. FromNowhere

    FromNowhere New Member

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

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    у Intel есть спецификация всех инструкций с псевдокодом логики их исполнения
    преобразованием псевдокода в реальный код виртуальной машины можно достичь нужной функциональности
    естественно, нужно эмулировать все програмное окружение (регистры и пр.)
     
  3. FromNowhere

    FromNowhere New Member

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

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    да кольца тут не причем, идет просто эмуляция выполнения инструкций и изменение виртуальной среды CPU
    допустим идет выполнение (эмуляция) виртуальной машиной (работает как обычный процесс пользовательского уровня) следующего кода
    Код (Text):
    1. ; код 0-го кольца
    2.     push word    RING1_SS
    3.     push dword  RING1_ESP
    4.     push word   RING1_CS
    5.     push dword RING1_EIP
    6.     retf ; переход на 1-ое кольцо
    псевдокод RETF выглядит следующим образом
    следовательно все эти условия должны быть проверены виртуальной машиной
    также должны быть произведены необходимые действия над виртуальными ресурсами CPU
     
  5. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    rei3er
    Ты не понял.
    Мы эмулируем нуливое кольцо, нам нужно перехватить спец команды. Для этого мы должны подменить нуливое кольцо на перввое-третье ведь так?
    Встает вопрос, что делать с регистрами CS,DS ведь в них вбит уровень кольца?
    Насколько я понял FromNowhere, говорит что подмену CS,DS легко распознать через push так как не является спец командой.
     
  6. PaCHER

    PaCHER New Member

    Публикаций:
    0
    Регистрация:
    25 мар 2006
    Сообщения:
    852
    Зачем?
    Эмулятор эмулит полностью все команды + всю работу процессора, защищенный режим, адресацию и.т.д. ТОесть так как это происходит в настоящем процессоре. И ниче перехватывать не нужно.
     
  7. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    PaCHER
    вот и я про то же
     
  8. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    FromNowhere
    Достоверной информации нет.
    Тогда будем действовать соим умом. Как бы ты сделал эмулятор с частичной эмуляцией?
    3-1 уровни превилегий понятно перехвотить системные команды и попытки оброжения к портам ввода, вывода и контроллировать обращение к памяти.

    А вот с 0 кольцом выходит нужно полностью эмулировать. Тут пашаговая трассировка. Или дизассемблирование и правка кода.

    Или можно не заботиться о уровни привелеги и ставить его как кальцо 1, и надеется что программа не будет проверять.
     
  9. PaCHER

    PaCHER New Member

    Публикаций:
    0
    Регистрация:
    25 мар 2006
    Сообщения:
    852
    Pavia
    С этого и надобыло начинать.
    Зачем делать эмуль с частичной эмуляцией когда можна взять сырсы с полной эмуляцией, и уже из него зделать частичную (ну если размер критичен)
     
  10. FromNowhere

    FromNowhere New Member

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

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    FromNowhere
    тогда нужно ловить и анализировать исключения, которые будут возникать при попытке выполнения чего-либо, что должно выполняться при CPL = 0
    т. е сама виртуальная машина - процесс пользовательского уровня
    пишем драйвер, который подготавливает свои обработчики исключений и среду выполнения
    далее виртуальная машина начинает исполнять некоторый образ
    попытка выполнения любой привелигерованной инструкции вызовет соответствующее исключение
    управление перейдет к драйверу, он анализирует текущий виртуальный CPL и принимает решение о том, что делать дальше: если виртуальный CPL к примеру = 0, то изменяем объект(ы) виртуальной среды (например регистр dbX) и возвращаем управление виртуальной машине
     
  12. FromNowhere

    FromNowhere New Member

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

    FromNowhere New Member

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

    rei3er maxim

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

    Pavia Well-Known Member

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

    А мы не можем перехвотить не прелигированные команды. Вернее можем если будем перехватывать все подрят в 0 кольце, в других не обязательно.



    Можно забить и сказать мол фича сами виноваты. :)
     
  16. FromNowhere

    FromNowhere New Member

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

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    все, понял
    все подрят то можем, только тут искусственный интеллект нужен к тому же
    где гарантия, что, допустим, код
    Код (Text):
    1. mov eax, cs
    не есть начало проверки уровня привилегий? :derisive:
     
  18. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    установка TF вероятно
     
  19. FromNowhere

    FromNowhere New Member

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

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    ну тогда один из регистров db0-db3