VC++ __asm{} вставка и регистр управления

Тема в разделе "LANGS.C", создана пользователем newb, 27 янв 2010.

  1. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
  2. newb

    newb New Member

    Публикаций:
    0
    Регистрация:
    4 июн 2008
    Сообщения:
    39
    Ну дос это логично. Мне вот просто на днях стало интересно, как Виртуальная машина работает, мануал про VMM почитал, решил попробовать переходить с асм-а на с++ с инлайном, и вот первая проблема, которая мне встретилась... Без регистров управления я никуда...
     
  3. cupuyc

    cupuyc New Member

    Публикаций:
    0
    Регистрация:
    2 апр 2009
    Сообщения:
    763
    такое ощущение что ты что-то не понимаешь, но непонятно что именно.
    насколько я тебя понял. ты хочешь написать свой загрузчик, который будет переводить проц в защищённый режим. т.е. компьютер стартует, загружает твой код, который выполняет переход. так? тогда тебе нужно инициализировать таблицы дескрипторов и проделать магию с управляющими регистрами. тут либо мануал по процу, либо в инете можно найти миллион примеров.
     
  4. cupuyc

    cupuyc New Member

    Публикаций:
    0
    Регистрация:
    2 апр 2009
    Сообщения:
    763
    при чём здесь Visual Studio я не понимаю. тет более подходящий инструмент - фасм или масм. один фиг бОльшую часть кода придётся писать на асме. вижал студио не подждерживает генерацию 16х кода, так что инлайном ты там нифига не сделаешь.
     
  5. newb

    newb New Member

    Публикаций:
    0
    Регистрация:
    4 июн 2008
    Сообщения:
    39
    Я не понимаю как тот же самый vmware загружает вирт. ОС, ведь без перехода процессора в режим виртуализации это не возможно(наверное). Из этого у меня и появился вопрос "КАК, якобы, из ОС (ринг3) прога начала юзать регистры управления, которые доступны из ринги0?". Как полагается я начал с простого, а именно использования инлайн ассемблерных вставок, которые у меня не работают, поэтому тема-то такая. (: Вот я хочу узнать, как мне реализовать (как лучше реализовать) работу скажем с CR0-CR4 на языке высокого уровня.
     
  6. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    newb
    Загрузить яденый селектор сегмента кода, после чего ваш код будет работать.
     
  7. cppasm

    cppasm New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    923
    newb - если ты не в курсе, виртуальные машины потому и виртуальные, что оборудование (в том числе и CPU) эмулируют полностью или частично.
    Если внутри VM выполнится MOV CR0,EAX на CR0 реального процессора это никак не повлияет.
     
  8. cupuyc

    cupuyc New Member

    Публикаций:
    0
    Регистрация:
    2 апр 2009
    Сообщения:
    763
    насколько сильно я заблуждаюсь, но ты не прав. некоторые виртуалки подрубают свой сегмент в GDT и работают на реальном проце. клерк сказал, вроде, про тоже самое.. просто нужно смотреть как они это делают. наверняка у vmware есть свой дров, который и колдует с таблицами сегментов.
     
  9. cppasm

    cppasm New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    923
    Нифига он не колдует.
    Все привилегированные команды внутри VM эмулируются.
    Реальное железо они затрагивают только в том случае если VM использует аппаратную виртуализацию.
    А некоторые VM эмулируют вообще все команды, но это долго очень (BOCHS например).
     
  10. cppasm

    cppasm New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    923
    Дров кстати тебе ничем не поможет.
    Если хостовая ОС работает в защищённом режиме CR0.Bit0=1, а гостевая в реальном CR0.Bit0=0 - то процессору что, разорваться?
    Если будет прямой доступ к CRх у гостевой ОС, то записью в CRх ты просто всю хостовую систему убьёшь.
     
  11. newb

    newb New Member

    Публикаций:
    0
    Регистрация:
    4 июн 2008
    Сообщения:
    39
    Пх. Мне понятно, что ничего не понятно. Как я понял единственный шанс работать с регистрами управления в Винде - это работа через драйвер.
     
  12. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    newb
    Сказано ведь чёрным по белому(Intel® 64 and IA-32 Architectures Software Developer’s Manual Volume 2A, 3-597):
    Что тут может быть не понятно ?