OBTENIR LE CPUID DE SON PROCESSEUR (DLL)

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 - 16 déc. 2004 à 22:18
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 - 18 déc. 2004 à 11:08
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/28218-obtenir-le-cpuid-de-son-processeur-dll

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
18 déc. 2004 à 11:08
Ils sont expliques je crois dans l'aide de MASM32. Unefois 'prologue' et 'epilogue' mis a 'none', c'est suffisant pour avoir la maitrise de ce qui sera produit. Tu sauras exact ou aller prendre les params, le 1er commençant bien en [esp+4], il faudra gerer correctement ESP et bien deplier en sortie (ret xxx) ou xxx est le nbr de params * 4 pour un prog 32 bits. Tu dois restituer comme tu les as trouves tous les registres sauf EAX, ECX et EDX.
sibi12 Messages postés 337 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 15 avril 2006
18 déc. 2004 à 01:13
Merci c'est très instructif ça... tu sais pas ou je pourrais trouver la signification de ces paramètres (et des autres si il y en a)?
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
17 déc. 2004 à 15:19
J'ai retrouve, exemple colmplet ici:
http://www.cppfrance.com/code.aspx?id=19713
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
17 déc. 2004 à 15:10
commence tes fichiers asm par:
.586
.model flat, stdcall
option casemap :none
option prologue:none
option epilogue:none

ça va supprimer les envies de stackframe et autres conneries qu'on ne demande pas.

LibMain proc ; on sait les 3 params d'une DLL
mov eax, 1
ret 12
LibMain endp

GetCPUID proc addrCPUID:DWORD
mov eax,1
cpuid
mov edx, [esp+4]
mov dword ptr [edx + 4],eax
mov eax,3
cpuid
mov eax, [esp+4]
mov dword ptr [eax + 8],ecx
mov dword ptr [eax + 12],edx
ret 4
GetCPUID endp

end LibMain

Quand on ecrit en asm doit etre asm sinon tu ecris en C sur VS et au moins il y a un super compilo pour produire un asm optimal. Faut laisser tomber le sabir MASM32 (IF etc...).
sibi12 Messages postés 337 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 15 avril 2006
17 déc. 2004 à 14:49
Ah non ca ne va pas pour ESI. j'avais deja essayer en fait le compilo interprete mov esi, addrCPUID comme mov esi, dword ptr [esp+4] et je dois modifier les 3 long qui se trouve a l'adresse pointer par addrCPUID.
sibi12 Messages postés 337 Date d'inscription jeudi 19 décembre 2002 Statut Membre Dernière intervention 15 avril 2006
17 déc. 2004 à 14:40
En fait c'est le template de MASM en je ne me suis interesser qu'à la procedure GetCPUID.

J'ai fait le code en 10 seconde mais tes remarque sont plutôt interessante surtout avec ESI. Je rectifie ça de suite.
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
16 déc. 2004 à 22:18
De quel exemple trop nul as-tu fait ce copier coller ???

LibMain: tu sauves un hInstance absolument inutile. Il y a aussi des registres pour travailler, push pop pour transferer une valeur, non !!! pourquoi cette suite d'analyse de 'reason' ???

GetCPUID: pourquoi mettre le param dans ESI a la 1ere ligne alors qu'il est sur la pile, ça genere 6 cycles inutiles.

Bonne continuation.
Rejoignez-nous