Obtenir le cpuid de son processeur (dll)

Soyez le premier à donner votre avis sur cette source.

Vue 10 021 fois - Téléchargée 845 fois

Description

Suite à un poste D'EBartSoft j'ai créer une petite DLL assembleur permettant de contourner le problème survenant de manière inexpliquer sur certaine machine.

Source / Exemple :


; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««

      .586                      ; create 32 bit code
      .model flat, stdcall      ; 32 bit memory model
      option casemap :none      ; case sensitive 

;     include files
;     ~~~~~~~~~~~~~
      include \masm32\include\windows.inc
      include \masm32\include\masm32.inc
      include \masm32\include\gdi32.inc
      include \masm32\include\user32.inc
      include \masm32\include\kernel32.inc
      include \masm32\include\Comctl32.inc
      include \masm32\include\comdlg32.inc
      include \masm32\include\shell32.inc
      include \masm32\include\oleaut32.inc
      include \masm32\include\dialogs.inc
      include \masm32\macros\macros.asm     ; the macro file

;     libraries
;     ~~~~~~~~~
      includelib \masm32\lib\masm32.lib
      includelib \masm32\lib\gdi32.lib
      includelib \masm32\lib\user32.lib
      includelib \masm32\lib\kernel32.lib
      includelib \masm32\lib\Comctl32.lib
      includelib \masm32\lib\comdlg32.lib
      includelib \masm32\lib\shell32.lib
      includelib \masm32\lib\oleaut32.lib

    ; ----------------------------------------
    ; prototypes for local procedures go here
    ; ----------------------------------------

      .data?
        hInstance dd ?

      .code

; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««

LibMain proc instance:DWORD,reason:DWORD,unused:DWORD 

    ret

LibMain endp

; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««

  comment * -----------------------------------------------------
          You should add the procedures your DLL requires AFTER
          the LibMain procedure. For each procedure that you
          wish to EXPORT you must place its name in the "CPUID.def"
          file so that the linker will know which procedures to
          put in the EXPORT table in the DLL. Use the following
          syntax AFTER the LIBRARY name on the 1st line.
          LIBRARY CPUID
          EXPORTS YourProcName
          EXPORTS AnotherProcName
          ------------------------------------------------------- *

; «««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««««

GetCPUID proc addrCPUID:DWORD

         mov esi, addrCPUID
         mov eax,1
         cpuid
         mov dword ptr [esi + 4h],eax
         mov  eax,3
         cpuid
         mov dword ptr [esi + 8h],ecx
         mov dword ptr [esi + 0Ch],edx
         ret

GetCPUID endp

end LibMain

Conclusion :


Code de départ : http://www.vbfrance.com/code.aspx?ID=19705

Je ne sais pas si le code est à sa place sur ce site mais je me disais que le plus important etait fait en assembleur donc voila...

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
24
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.
Messages postés
337
Date d'inscription
jeudi 19 décembre 2002
Statut
Membre
Dernière intervention
15 avril 2006

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)?
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
24
J'ai retrouve, exemple colmplet ici:
http://www.cppfrance.com/code.aspx?id=19713
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
24
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...).
Messages postés
337
Date d'inscription
jeudi 19 décembre 2002
Statut
Membre
Dernière intervention
15 avril 2006

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.
Afficher les 7 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.