当前位置:首页 > 内存 > 正文

虚拟机内存处理器设置(vm虚拟机处理器数量)

  • 内存
  • 2024-06-14 19:15:48
  • 1498

一、梦幻如何检测虚拟机、进行特权指令检测
在x86系统中,有些指令在获取硬件相关信息时不会抛出异常,如sidt、sgdt、sldt、cpuid等。不过,由于性能原因,VMware并没有对这些指令进行虚拟化,因此也就意味着这些指令在VM虚拟机和物理机中执行时会返回不同的结果。
Redpill
简单来说,就是通过执行sidt指令来获取IDT寄存器的值(IDT:中断描述表,可以简单理解为查找用于处理中断的函数,一个总共256个元素,与元素3相同(这是我们常用的int3断点)作者的测试表明,虚拟机中的IDT地址通常位于0xFFXXXXXX,而在真实主机上则位于0x80xxxxxx。,可以通过评估执行SIDT指令后返回的第一个字节是否大于0xD0来判断是否位于虚拟机中,同时该技术必须能够运行在单核处理器上,因为每个.core只有一张IDT表,是多核交换机,很难确定具体值
可能是虚拟机升级导致的。
2.使用cpuid语句来检测虚拟机程序上的代码执行的能力位是否被设置。有些虚拟机可能没有设置这个功能!
boolIsVMWare();
intmain(intargc,char*argv[])
{
boolbRet;
bRet=IsVMWare();
if(bRet){
printf("在虚拟机环境中运行");
}
else
{
printf("在真实物理机环境中运行");
}
getchar();
return0;
boolIsVMWare()
{
unsignedintcpuInfo[4];
__cpuid((int*)cpuInfo,1);
return((cpuInfo[2]>>31)&1)==1;
登后复制

(本地描述符表)
sgdt和sldt指令检测技术基于LDT(本地描述符表),因为它是由处理器而不是操作系统分配的。由于Windows一般情况下不使用LDT,但VM为LDT提供了虚拟化支持,结果是:LDT位置在真机中为0,但在虚拟机中不为0。同时,对于GTR来说,虚拟机应该是0xFFXXXXXX,否则就是真机。
inlineboolIsVirtualPC_LDTCcheck()
{
unsignedshortldt_addr=0;
unsignedcharldtr[2];
_asmsldtldtr
ldt_addr=*((unsignedshort*)&ldtr);
returnldt_addr!=0x00000000;
登录后复制
4.注册表检测
inlineboolDetectVM()
{
HKEYhKey;
charszBuffer[64];
unsignedlonghSize=sizeof(szBuffer)-1;
if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,"HARDWARE\\DESCRIPTION\\System\\BIOS\\",0,KEY_READ,&hKey)==ERROR_SUCCESS)
{
RegQueryValueEx(hKey,"SystemManufacturer",NULL,NULL,(unsignedchar*)szBuffer,&hSize);
if(strstr(szBuffer,"VMWARE"))
{
RegCloseKey(hKey);
returntrue;
}
RegCloseKey(hKey);
returnfalse;
登录后复制

检测
inlineboolIsVirtualPC_GDTCheck()
{
unsignedintgdt_addr=0;
unsignedchargdtr[6];
_asmsgdtgdtr
gdt_addr=*((unsignedint*)&gdtr[2]);
return(gdt_addr>>24)==0xff;
登录后复制
6br/>
inlineboolIsVirtualPC_TSSCheck()
{
unsignedcharmem[4]={0};
__asmstrmem;
return(mem[0]==0x00)&&(mem[1]==0x40);
}
访问后复制
7.I/O通讯端口检测原理:使用IN命令读取特定端口的数据,进行两台机器之间的通讯,但是由于IN命令是特权命令,当在保护模式下的机器上执行该命令时,除非权限允许,否则将抛出“EXCEPTION_PRIV_INSTRUCTION”类型的异常。虚拟机中不会出现异常。当指定的函数号为0xA/10(获取VMware版本)时,EBX中将返回其版本号“VMXH”,当函数号为0x14时;可以用来获取VMware版本。当大于0时,表示处于虚拟机中。代码分析如下:
二、我的电脑配置能用虚拟机(VMwareWorkstation(虚拟机)V6.0.2Build59824汉化版)吗?可以使用,但是主机在设置虚拟机时要减少虚拟机的内存。例如,如果您的服务器内存是1g内存,建议减小虚拟机的内存大小。设置为128mb或稍大一些,256mb、384mb、400mb。如果虚拟机的内存大小超过500mb,服务器肯定会卡住。400mb如果主机要创建更多虚拟机,则不应在虚拟机上安装XP系统,因为XP系统比虚拟机占用更多内存。应该用2000,应该按2000做。


三、虚拟机显存0怎么设置变32MB就行
您的
虚拟机
关闭
时,
添加
以下


虚拟机
.vmx
config
文件:
ze
=
67108864
这个
线
增加
虚拟
显示器

VRAM
的数量


64
MB。
添加
更多
VRAM
有助于
减少

来宾中
进行脱粒。
最大


128
MB。