Ну дос это логично. Мне вот просто на днях стало интересно, как Виртуальная машина работает, мануал про VMM почитал, решил попробовать переходить с асм-а на с++ с инлайном, и вот первая проблема, которая мне встретилась... Без регистров управления я никуда...
такое ощущение что ты что-то не понимаешь, но непонятно что именно. насколько я тебя понял. ты хочешь написать свой загрузчик, который будет переводить проц в защищённый режим. т.е. компьютер стартует, загружает твой код, который выполняет переход. так? тогда тебе нужно инициализировать таблицы дескрипторов и проделать магию с управляющими регистрами. тут либо мануал по процу, либо в инете можно найти миллион примеров.
при чём здесь Visual Studio я не понимаю. тет более подходящий инструмент - фасм или масм. один фиг бОльшую часть кода придётся писать на асме. вижал студио не подждерживает генерацию 16х кода, так что инлайном ты там нифига не сделаешь.
Я не понимаю как тот же самый vmware загружает вирт. ОС, ведь без перехода процессора в режим виртуализации это не возможно(наверное). Из этого у меня и появился вопрос "КАК, якобы, из ОС (ринг3) прога начала юзать регистры управления, которые доступны из ринги0?". Как полагается я начал с простого, а именно использования инлайн ассемблерных вставок, которые у меня не работают, поэтому тема-то такая. (: Вот я хочу узнать, как мне реализовать (как лучше реализовать) работу скажем с CR0-CR4 на языке высокого уровня.
newb - если ты не в курсе, виртуальные машины потому и виртуальные, что оборудование (в том числе и CPU) эмулируют полностью или частично. Если внутри VM выполнится MOV CR0,EAX на CR0 реального процессора это никак не повлияет.
насколько сильно я заблуждаюсь, но ты не прав. некоторые виртуалки подрубают свой сегмент в GDT и работают на реальном проце. клерк сказал, вроде, про тоже самое.. просто нужно смотреть как они это делают. наверняка у vmware есть свой дров, который и колдует с таблицами сегментов.
Нифига он не колдует. Все привилегированные команды внутри VM эмулируются. Реальное железо они затрагивают только в том случае если VM использует аппаратную виртуализацию. А некоторые VM эмулируют вообще все команды, но это долго очень (BOCHS например).
Дров кстати тебе ничем не поможет. Если хостовая ОС работает в защищённом режиме CR0.Bit0=1, а гостевая в реальном CR0.Bit0=0 - то процессору что, разорваться? Если будет прямой доступ к CRх у гостевой ОС, то записью в CRх ты просто всю хостовую систему убьёшь.
Пх. Мне понятно, что ничего не понятно. Как я понял единственный шанс работать с регистрами управления в Винде - это работа через драйвер.
newb Сказано ведь чёрным по белому(Intel® 64 and IA-32 Architectures Software Developer’s Manual Volume 2A, 3-597): Что тут может быть не понятно ?