Exemple #1
0
 static Patcher()
 {
     if (IntPtr.Size != 8)
     {
         Error = "Not a 64 bit";
         return;
     }
     PatchCpuid(typeof(Patcher).GetMethod("Cpuid", DefaultBinding));
     if (Error != null)
     {
         return;
     }
     PatchCallSitePtr = GetMethodPtr(typeof(Patcher).GetMethod("PatchCallSite", DefaultBinding));
     fixed(int *cpuInfo = new int[4])
     {
         CpuFeatures = new ReplaceWithAttribute("<unused>");
         Cpuid(1, cpuInfo);
         CpuFeatures.Cpiud1EDX = cpuInfo[3];
         CpuFeatures.Cpiud1ECX = cpuInfo[2];
         Cpuid(7, cpuInfo);
         CpuFeatures.Cpiud7EBX = cpuInfo[1];
         CpuFeatures.Cpiud7ECX = cpuInfo[2];
         Cpuid(0x80000001, cpuInfo);
         CpuFeatures.Cpiud80000001EDX = cpuInfo[3];
         CpuFeatures.Cpiud80000001ECX = cpuInfo[2];
     }
 }
 internal bool CheckFeatures(ReplaceWithAttribute features)
 {
     return
         ((features.Cpiud1EDX & Cpiud1EDX) == Cpiud1EDX &&
          (features.Cpiud1ECX & Cpiud1ECX) == Cpiud1ECX &&
          (features.Cpiud7EBX & Cpiud7EBX) == Cpiud7EBX &&
          (features.Cpiud7ECX & Cpiud7ECX) == Cpiud7ECX &&
          (features.Cpiud80000001EDX & Cpiud80000001EDX) == Cpiud80000001EDX &&
          (features.Cpiud80000001ECX & Cpiud80000001ECX) == Cpiud80000001ECX);
 }