26/07/2011

cpuid is your friend

Introduction

A un moment donné faut se tenir à jour, j'entends par là utiliser des OS peut être pas de qualité, mais qui sont au goût du jour (Seven 64bits), histoire de pouvoir jouer avec des rookits par exemple, seul hic :
"Merde mon proc il supporte le 64 bits ?"
C'est aprè avoir vu un joli failed (à se demander si les mecs qui codent des FakeAV allument leur cerveau quand ils codent ), que cpuid est la réponse à ma question.

Code

Je poste un bout de code qui pourra peut être servir à d'autre qu'à moi, même si des outils le font très bien.
Mais on aime souvent réinventer la roue :

#include <stdio.h>

int main(void)
{
  unsigned int code = 0x80000001;
  unsigned int a, b, c, d;

  __asm__ volatile ("cpuid" : "=a"(a), "=b"(b), "=c"(c), "=d"(d) : "a"(code));
  if (d & (1 << 29))
    printf("64 bit available\n");
  else
    printf("64 bit not available\n");
  return (0);
}

Code simpliste juste pour checker si le long mode est disponible ou non sur le processeur.