#21022967 · 7 Aug 2010, 18:20 · · პროფილი · პირადი მიმოწერა · ჩატი
გამარჯობათ. http://www.codeproject.com/KB/system/VmDetect.aspxზემოთ მოყვანილ ლინკზე არის დლლ-ს აღწერა, რომელიც იძლევა საშუალებას განსაზღვრო, სისტემა ვირტუალუალურ მანქანაზე დგას თუ რკინაზე. ამ დლლ-ს ვიყენებდი სანამ x64-ზე გადავიდოდი. აქ არ მუშაობს. საერთოდ პროექტი არ კომპილირდება. თვითონ დლლ-ის კომპილირებასაც ვერ ვახერხებ, შეცდომას აგდებს | QUOTE | | Error 1 fatal error LNK1181: cannot open input file 'libcd.lib' VmDetectLibrary VmDetectLibrary |
სტუდიაში პლიუსებზე არასდროს მიმუშავია (და საერთოდ პლიუსებზე 15-20 წელია არაფერი გამიკეთებია) ასე რომ როგორ ვუშველო ამ საქმეს არ ვიცი. რეალურად მჭირდება ამ კოდიდან მხოლოდ ნაწილი
| CODE | // IsInsideVPC's exception filter DWORD __forceinline IsInsideVPC_exceptionFilter(LPEXCEPTION_POINTERS ep) { PCONTEXT ctx = ep->ContextRecord; ctx->Ebx = -1; // Not running VPC ctx->Eip += 4; // skip past the "call VPC" opcodes return EXCEPTION_CONTINUE_EXECUTION; // we can safely resume execution since we skipped faulty instruction } // High level language friendly version of IsInsideVPC() bool IsInsideVPC() { bool rc = false; __try { _asm push ebx _asm mov ebx, 0 // It will stay ZERO if VPC is running _asm mov eax, 1 // VPC function number // call VPC _asm __emit 0Fh _asm __emit 3Fh _asm __emit 07h _asm __emit 0Bh _asm test ebx, ebx _asm setz [rc] _asm pop ebx } // The except block shouldn't get triggered if VPC is running!! __except(IsInsideVPC_exceptionFilter(GetExceptionInformation())) { } return rc; } |
თუ ვინმეს არ დაეზარება და ამიწყობს პროექტს, რომლის კომპილირებასაც შევძლებ და რომელიც 32-ზეც იმუშავებს და 64-ზეც, დიდად მადლობელი დაგრჩებით.
|