X-Git-Url: http://git.grml.org/?a=blobdiff_plain;f=compile%2Fvmware-detect.c;fp=compile%2Fvmware-detect.c;h=f3875a79cc534afc17c5e6aa18b8df2fb751e01b;hb=8d76b94df26f5ab327a69a036a664872f2df9fca;hp=d242a388d52d59839c9a39a4022e1c4eb8102665;hpb=4c24f0221db13d5b47445b1c1bd6362ebd4408d5;p=grml-scripts-core.git diff --git a/compile/vmware-detect.c b/compile/vmware-detect.c index d242a38..f3875a7 100644 --- a/compile/vmware-detect.c +++ b/compile/vmware-detect.c @@ -1,13 +1,24 @@ -#include +#if defined (__i386__) +int checkVmware() +{ + unsigned char idtr[6]; + asm("sidt %0" : "=m" (idtr)); + return (0xff==idtr[5]) ? 0 : 1; +} +#elif defined (__x86_64__) +// only guessed, possible need to check against 0xffff? +int checkVmware() +{ + unsigned char idtr[10]; + asm("sidt %0" : "=m" (idtr)); + return (0xff==idtr[9]) ? 0 : 1; +} +#else +// vmware runs only on the archs above +int checkVmware() { return 1; } +#endif + int main() { - unsigned char idtr[6]; - asm("sidt %0" : "=m" (idtr)); - if(0xff==idtr[5]) - { - return 0; - } - else - { - return 1; - } + // returns 0 if running inside vmware, 1 otherwise + return checkVmware(); }