
    e                        d dl mZ d dlZd dlZd dlZd dlmZmZmZmZm	Z	m
Z
mZ g dZg dZg dZej        dk    Z ej        ej                  dk    Z G d	 d
ej                  Z G d de          Zedk    ryd Z ed                    d dD                                                                   e            D ]3\  ZZ edez  d                    d eD                                  2dS dS )    )print_functionN)c_uint32c_longc_ulongc_size_tc_void_pPOINTER	CFUNCTYPE)S         r            r      r   _      r   O      r   W      [      )r   r      I   r      D   r      r   r   A   r      r   r   Y   r   r   r   r   r   r   r   Q   r   r   r   )r   r      |   $   r   r#   r   r%      r#   L   r%      r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   ntr   c                   6    e Zd ZdZd eD             Zd Zd ZdS )CPUID_struct)eaxebxecxedxc                      g | ]}|t           fS  )r   ).0rs     ;lib/python3.11/site-packages/archspec/vendor/cpuid/cpuid.py
<listcomp>zCPUID_struct.<listcomp>J   s    777!H777    c                 R    || j         vrt          |          t          | |          S )N)_register_namesKeyErrorgetattr)selfitems     r4   __getitem__zCPUID_struct.__getitem__L   s,    t+++4.. tT"""r6   c                 Z    d                     | j        | j        | j        | j                  S )Nz.eax=0x{:x}, ebx=0x{:x}, ecx=0x{:x}, edx=0x{:x})formatr,   r-   r.   r/   r;   s    r4   __repr__zCPUID_struct.__repr__Q   s*    ?FFtxQUQY[_[ceiemnnnr6   N)__name__
__module____qualname__r8   _fields_r=   rA   r1   r6   r4   r+   r+   H   sO        2O77777H# # #
o o o o or6   r+   c                   *    e Zd Zd ZddZddZd ZdS )CPUIDc                 8   t          j                    dvrt          d          t          rFt          r!t          j        d          | _        t          }n3t
          j	        j
        | _        t          }nt          rt          nt          }t          |          }t          j        |z  | }t          rt          | j        j        _        t
          j        t
          j        t
          j        t
          j        g| j        j        _        | j                            d |dd          | _        | j        st-          d          t          j        | j        ||           nddlm}m}m}m}m}m}	  |d	|||z  ||z  |	z  
          | _        | j                            |           t          j         t
          j!        "                    | j                            | _        tG          d tI          tJ                    tL          tL                    }
 |
| j                  | _'        d S )N)AMD64x86_64x86i686zOnly available for x86zkernel32.dlli   @   zCould not allocate RWX memoryr   )mmapMAP_PRIVATEMAP_ANONYMOUS
PROT_WRITE	PROT_READ	PROT_EXEC)flagsprot)(platformmachineSystemError
is_windowsis_64bitctypesCDLLwin_WINDOWS_64_OPCwindllkernel32_CDECL_32_OPC_POSIX_64_OPClenc_ubyter   VirtualAllocrestyper   r   argtypesaddrMemoryErrormemmoverN   rO   rP   rQ   rR   rS   mmwrite	addressofc_intfrom_bufferr
   r	   r+   r   func_ptr)r;   opcsizecoderN   rO   rP   rQ   rR   rS   	func_types              r4   __init__zCPUID.__init__V   s   %GGG6777 	? $ ";~66%
 "=1##+>--C3xx%, 	L,4DH!).4ovPVP^`f`n-oDH!*--dD&$GGDI9 C!"ABBBN49dD1111                d!M1)+i7	  DG GMM$()A)A$')J)JKKDIdGL$9$98XNN	!	$),,r6   r   c                 d    |                      ||          }|j        |j        |j        |j        fS )N)r,   r.   )registers_forr,   r-   r.   r/   r;   r,   r.   structs       r4   __call__zCPUID.__call__   s1    ###55z6:vz6:==r6   c                 P    t                      }|                     |||           |S )zCalls cpuid with eax and ecx set as the input arguments, and returns a structure
        containing eax, ebx, ecx, and edx.
        )r+   rq   ry   s       r4   rx   zCPUID.registers_for   s(     fc3'''r6   c                     t           r\t          | j        j        _        t
          t          t          g| j        j        _        | j                            | j	        dd           d S | j
                                         d S )Nr   i   )rZ   r   r^   VirtualFreerg   r   r   r   rh   ri   rl   closer@   s    r4   __del__zCPUID.__del__   s`     	+1DH (-5x,IDH )H  Av66666GMMOOOOOr6   N)r   )rB   rC   rD   rv   r{   rx   r   r1   r6   r4   rG   rG   U   s[        1- 1- 1-f> > > >       r6   rG   __main__c               #      K   t                      } dD ]4} | |          \  }}}}||k    r | |          }||fV  |dz  }||k    5d S )N)r   l        r    )rG   )cpuidr,   highest_regss        r4   valid_inputsr      sy      $ 	 	C$uSzzGQ1..uSzzDk!!!q ..	 	r6    c              #   @   K   | ]}|                     d           V  dS )r   N)ljust)r2   xs     r4   	<genexpr>r      s,      EE!1771::EEEEEEr6   )rG   ABCD%08xc              #       K   | ]	}d |z  V  
dS )r   Nr1   )r2   regs     r4   r   r      s&      $B$BcVc\$B$B$B$B$B$Br6   )
__future__r   rW   osr\   r   r   r   r   r   r	   r
   rc   r_   rb   namerZ   sizeofc_voidpr[   	Structurer+   objectrG   rB   r   printjoinstripr,   r   r1   r6   r4   <module>r      s   & % % % % %  				  T T T T T T T T T T T T T T T T T T        W_
6=((A-
o 
o 
o 
o 
o6# 
o 
o 
oF F F F FF F F FT z   
E#((EE'DEEE
E
E
K
K
M
MNNN!\^^ D D	TfslCHH$B$BT$B$B$BBBCCCC D Dr6   