Господа,
как определить то что приложение запущено на виртуальной машине?
ос: виндовс х64
язык: срр
Предистория: была ассемблерная функция для 32-битной системы, но с переходом на х64 получил ошибку компиляции
error C4235: nonstandard extension used : '_asm' keyword not supported on this architecture
Здравствуйте, gok, Вы писали:
gok>Господа, gok>как определить то что приложение запущено на виртуальной машине? gok>ос: виндовс х64 gok>язык: срр
gok>Предистория: была ассемблерная функция для 32-битной системы, но с переходом на х64 получил ошибку компиляции gok>error C4235: nonstandard extension used : '_asm' keyword not supported on this architecture
причём тут виртуалка? 64 MS действительно не поддержиывает __asm.
Здравствуйте, Сергей Мухин, Вы писали:
СМ>причём тут виртуалка? 64 MS действительно не поддержиывает __asm.
Вопрос был: есть ли другие средства используя срр
Здравствуйте, gok, Вы писали:
gok>Здравствуйте, Сергей Мухин, Вы писали:
СМ>>причём тут виртуалка? 64 MS действительно не поддержиывает __asm. gok>Вопрос был: есть ли другие средства используя срр
--
В чистом cpp 64 бита можно — g++ поддерживает asm Intel и AT&T синтакс.
Можно ассемблерный код выделить в отдельный файл, скомпилировать с masm и прилинковать. Что встроенный asm что из обьектного файла — значения не имеет.
Можна использовать intrinsic https://software.intel.com/sites/landingpage/IntrinsicsGuide/ — "C style functions that provide access to many Intel instructions"
Здравствуйте, vasyaa, Вы писали:
V>Здравствуйте, gok, Вы писали:
gok>>Здравствуйте, Сергей Мухин, Вы писали:
СМ>>>причём тут виртуалка? 64 MS действительно не поддержиывает __asm. gok>>Вопрос был: есть ли другие средства используя срр V>-- V>В чистом cpp 64 бита можно — g++ поддерживает asm Intel и AT&T синтакс. V>Можно ассемблерный код выделить в отдельный файл, скомпилировать с masm и прилинковать. Что встроенный asm что из обьектного файла — значения не имеет. V>Можна использовать intrinsic https://software.intel.com/sites/landingpage/IntrinsicsGuide/ — "C style functions that provide access to many Intel instructions"
Исправление:
В принципе — в чистом cpp — нет — нет такого в стандарте.
Но в раширениях копилятора специфическими производителями компиляторов — да. Пример — gcc, sunCC, думаю что IBM xlC тоже. Microsoft не поддерживает inline assembly в 64 бита версии компилятора.
Здравствуйте, gok, Вы писали:
gok>Господа, gok>как определить то что приложение запущено на виртуальной машине? gok>ос: виндовс х64 gok>язык: срр
gok>Предистория: была ассемблерная функция для 32-битной системы, но с переходом на х64 получил ошибку компиляции gok>error C4235: nonstandard extension used : '_asm' keyword not supported on this architecture
Как сказано на мсдне, вынесите функцию в отдельный .asm файл и прилинкуйте полученный объектник к проекту.
Здравствуйте, gok, Вы писали:
gok>Господа, gok>как определить то что приложение запущено на виртуальной машине? gok>ос: виндовс х64 gok>язык: срр
gok>Предистория: была ассемблерная функция для 32-битной системы, но с переходом на х64 получил ошибку компиляции gok>error C4235: nonstandard extension used : '_asm' keyword not supported on this architecture
Здравствуйте, gok, Вы писали:
gok>Здравствуйте, Cruser, Вы писали: C>> Должно быть "VMWareVMWare" или "HyperV".
gok>С разбегу не получилось. Пробовал распечатывать целые значения из cpuInf, gok>на моем лэптопе: gok>7 gok>832 gok>832 gok><strid начинается с \a те ничего не печатается>
gok>на виртуальной: gok>1073741830 gok>1919117645 gok>1718580079 gok><знак "Пики", Alt+6>
gok>Unicode?
Ваши цифры в ASCII: Microsoft Hv. Это не юникод. Правда, возможно, этот метод не работает в других виртуалках, таких как VirtualBox. Так что извиняюсь.
Здравствуйте, Cruser, Вы писали:
C> Ваши цифры в ASCII: Microsoft Hv. Это не юникод. Правда, возможно, этот метод не работает в других виртуалках, таких как VirtualBox. Так что извиняюсь.
теперь на виртуальной:
1919117645
1718580079
1984438388
Microsoft Hv
Для VMWare сервера, наверное, будет что то подобное