Sprawdzanie oryginalności procesora Intel(R)
Manna5
To, czy nasz program jest wykonywany na procesorze wyprodukowanym przez Intel® sprawdzić można instrukcją CPUID
. Trzeba tylko pamiętać, że jest ona dostępna od 586 - na starszych procesorach po prostu nie ma takiej instrukcji i trzeba wykorzystać bardziej złożone sposoby.
Instrukcja CPUID
przyjmuje w 32-bitowym rejestrze EAX kod rodzaju informacji, które chcemy sprawdzić. Jeśli interesuje nas marka procesora, odpowiedni kod to 0. Dostaniemy 12-znakowy tekst ASCII w rejestrach EBX:EDX:ECX. Na Intelu jest to GenuineIntel. Oznacza to, że musimy sprawdzić, czy EBX=$756E6547 ECX=$6C65746E EDX=$49656E69. Poniżej podaję odpowiedni fragment programu w asemblerze.
; ...
; Zakładam, że CPUID jest obsługiwane.
; Uzyskanie nazwy marki.
XOR EAX, EAX
CPUID
; Porównanie z "GenuineIntel".
CMP EBX, $756E6547
JNE Inny
CMP ECX, $6C65746E
JNE Inny
CMP EDX, $49656E69
JNE Inny
; Mamy procesor Intela.
Inny:
; Dowolny producent.
; ...
Jeżeli natomiast chcemy dodatkowo rozróżnić procesory AMD, ich "identyfikator" to AuthenticAMD.