
    gQ                        % S r SSKrSSKJr  SSKJr  SSKJr  SSKJ	r	  \S   r
0 S\R                  \R                  \R                  \R                  /_S\R                  \R                   \R"                  \R$                  /_S	\R&                  \R(                  \R*                  \R,                  /_S
\R.                  \R0                  \R2                  \R4                  /_S\R6                  \R8                  \R:                  \R<                  /_S\R>                  \R@                  \RB                  \RD                  /_S\RF                  \RH                  \RJ                  \RL                  /_S\RN                  \RP                  \RR                  \RT                  /_S\RV                  \RX                  \RZ                  \R\                  /_S\R^                  \R`                  \Rb                  \Rd                  /_S\Rf                  \Rh                  \Rj                  \Rl                  /_S\Rn                  \Rp                  \Rr                  \Rt                  /_S\Rv                  \Rx                  \Rz                  \R|                  /_S\R~                  \R                  \R                  \R                  /_S\R                  \R                  \R                  \R                  /_S\R                  \R                  \R                  \R                  /_rK\L\M\N\   4   \OS'    " S S\R                  5      rQ " S S\R                  5      rR " S S\R                  5      rS\ " S S5      5       rT\ " S  S!5      5       rU\ " S" S#5      5       rV\ " S$ S%5      5       rW\ " S& S'5      5       rXS(\4S) jrYS*\
S+\S,   S-\ZS-  4S. jr[g)/z<This module provides types for representing x86 machine code    N)	dataclass)Literal)Register)	RexPrefix)r                        r   r   r	   r
   r   r   r      	   
                  REGISTER_CODESc                   $    \ rS rSrSrSrSrSrSrg)AddressingMode%   r   r   r   r	    N)	__name__
__module____qualname____firstlineno__INDIRECTINDIRECT_WITH_BYTE_DISPLACEMENT#INDIRECT_WITH_FOUR_BYTE_DISPACEMENTDIRECT__static_attributes__r       3/mnt/public/Repos/urclelf/./x86/encoding/machine.pyr   r   %   s    H&'#*+'Fr$   r   c                        \ rS rSrSrSrSrSrg)InstructionPrefix+   r         r   N)r   r   r   r   LOCKREPEAT_NOT_EQUALREPEAT_EQUALr#   r   r$   r%   r'   r'   +   s    DLr$   r'   c                   $    \ rS rSrSrSrSrSrSrg)SegmentOverridePrefix0   6   >   .   &   r   N)	r   r   r   r   STACKDATACODEEXTRAr#   r   r$   r%   r/   r/   0   s    EDDEr$   r/   c                   `    \ rS rSr% \S-  \S'   \\S'   \\S'   \S-  \S'   \S 5       r	S r
S	rg)
InstructionPrefixesr1   Ninstruction_prefixaddress_size_overrideoperand_size_overridesegment_overridec                      [        S SSS 5      $ )NF)r:   r   r$   r%   noneInstructionPrefixes.none=   s    "4t<<r$   c                 B   [        5       nU R                  (       a  U[        U R                  /5      -  nU R                  (       a  U[        S/5      -  nU R                  (       a  U[        S/5      -  nU R                  (       a  U[        U R                  /5      -  nU$ )Ng   f   )bytesr;   r<   r=   r>   )selfresults     r%   	__bytes__InstructionPrefixes.__bytes__A   s    ""eT44566F%%eTFm#F%%eTFm#F  eT22344Fr$   r   )r   r   r   r   r'   __annotations__boolr/   staticmethodr@   rH   r#   r   r$   r%   r:   r:   6   s;    )D00+d22= =r$   r:   c                   X    \ rS rSr% \\S'   \\S'   \S\4S j5       r	S r
S r\rS rSrg	)
OpcodeO   expansion_prefixvaluec                 ,    [        US   S:H  US   5      $ )Nr   r   )rN   )clsrQ   s     r%   
from_bytesOpcode.from_bytesT   s    eAh$&b	22r$   c                 2    [        U R                  S-  5      $ )Nr   rK   rQ   rF   s    r%   get_direction_bitOpcode.get_direction_bitX       DJJ+,,r$   c                 2    [        U R                  S-  5      $ )Nr   rX   rY   s    r%   get_register_size_bitOpcode.get_register_size_bit[   r\   r$   c                 b    [        S/5      U R                  -  [        U R                  /5      -   $ )Nr   )rE   rP   rQ   rY   s    r%   rH   Opcode.__bytes___   s)    dV}d333eTZZL6IIIr$   r   N)r   r   r   r   rK   rJ   intclassmethodrE   rU   rZ   r^   get_immediate_size_bitrH   r#   r   r$   r%   rN   rN   O   s>    J3u 3 3-- 3Jr$   rN   c                   H    \ rS rSr% \\S'   \\S'   \\S'   S rS\4S jr	Sr
g	)
ModRegRMb   modregrmc                     [        U R                  R                  S-  U R                  S-  -  U R                  -  /5      $ Nr   r	   )rE   rh   rQ   ri   rj   rY   s    r%   rH   ModRegRM.__bytes__h   s3    dhhnn)DHHM9DGGCDEEr$   returnc                 j    SU R                   R                   SU R                   SU R                   S3$ N[ ])rh   nameri   rj   rY   s    r%   __str__ModRegRM.__str__k   s-    488==/488*AdggYa88r$   r   N)r   r   r   r   r   rJ   	ThreeBitsrH   strru   r#   r   r$   r%   rf   rf   b   s$    		NMF9 9r$   rf   c                   N    \ rS rSr% \S   \S'   \\S'   \\S'   S rS\4S jr	S	r
g
)ScaleIndexByten   )r   r   r   r	   scaleindexbasec                 n    [        U R                  S-  U R                  S-  -  U R                  -  /5      $ rl   )rE   r|   r}   r~   rY   s    r%   rH   ScaleIndexByte.__bytes__t   s.    djjAo

a7$))CDEEr$   rn   c                 V    SU R                    SU R                   SU R                   S3$ rp   )r|   r}   r~   rY   s    r%   ru   ScaleIndexByte.__str__w   s)    4::,a

|1TYYKq99r$   r   N)r   r   r   r   r   rJ   rw   rH   rx   ru   r#   r   r$   r%   rz   rz   n   s*    :
OF: :r$   rz   c                       \ rS rSr% \S-  \S'   \\S'   \\S'   \S-  \S'   \	S-  \S'   \
\S'   \
\S	'   S
 rS rS rSrg)X86MachineInstruction|   N
rex_prefixprefixesopcode
mod_reg_rmsibdisplacement	immediatec                    SnU R                   (       a!  U[        [        U R                   5      5      -  nU[        [        U R                  5      [        U R                  5      -   5      -  nU R
                  (       a!  U[        [        U R
                  5      5      -  nU R                  (       a!  U[        [        U R                  5      5      -  nU$ Nr   )r   lenrE   r   r   r   r   )rF   r}   s     r%   get_displacement_index,X86MachineInstruction.get_displacement_index   s    ??St/00EU4==)E$++,>>????St/00E88Stxx))Er$   c                 N    U R                  5       [        U R                  5      -   $ N)r   r   r   rY   s    r%   get_immediate_index)X86MachineInstruction.get_immediate_index   s!    **,s43D3D/EEEr$   c                    [        5       nU R                  (       a  U[        U R                  5      -  nU[        U R                  5      -  nU[        U R                  5      -  nU R                  (       a  U[        U R                  5      -  nU R
                  (       a  U[        U R
                  5      -  nXR                  -  nXR                  -  nU$ r   )rE   r   r   r   r   r   r   r   )rF   machine_codes     r%   rH   X86MachineInstruction.__bytes__   s    w??E$//22Ldmm,,dkk**??E$//22L88E$((O+L)))&r$   r   )r   r   r   r   r   rJ   r:   rN   rf   rz   rE   r   r   rH   r#   r   r$   r%   r   r   |   sI    D  !!N4	$	Fr$   r   registerc                 @    [          H  nU [         U   ;   d  M  Us  $    gr   )r   )r   codes     r%   get_register_coder      s#    ~d++K  r$   	reg_fieldsize)r          @   rex_reg_extentionc                    S n[         Ub  UOSS-  U -      H!  nUR                  R                  U:X  d  M  Un  O   [        S5      e[        R
                  [        R                  [        R                  [        R                  [        R                  [        R                  [        R                  [        R                  0nX5R                  5       ;   a  XS   $ U$ )Nr   r	   zUnreachable code (Uh Oh!))r   rQ   r   
ValueErrorr   AHSPLCLBPLDLSILBLDILkeys)r   r   r   r   ri   "map_registers_unreachable_with_rexs         r%   register_from_coder      s     $H4E4Q0WX]^^ajjk99>>T!H l
 455 	X\\X\\X\\X\\	D& ::<<1;;Or$   )\__doc__enumdataclassesr   typingr   x86.registerr   x86.encoding.rexr   rw   ALAXEAXRAXr   CXECXRCXr   DXEDXRDXr   BXEBXRBXr   SPESPRSPCHBPEBPRBPDHSIESIRSIBHDIEDIRDIR8LR8WR8DR8R9LR9WR9DR9R10LR10WR10DR10R11LR11WR11DR11R12LR12WR12DR12R13LR13WR13DR13R14LR14WR14DR14R15LR15WR15DR15r   dictrb   listrJ   IntEnumr   r'   r/   r:   rN   rf   rz   r   r   rK   r   r   r$   r%   <module>r      sq   >  !  ! & *+	-x||hllC- x||hllC- x||hllC	-
 x||hllC- x||hllC- x||hllC- x||hllC- x||hllC- x||hkkB- x||hkkB- x}}hllC- x}}hllC- x}}hllC- x}}hllC-  x}}hllC!-" x}}hllC#-S$x.() (T\\  
DLL    0 J J J$ 	9 	9 	9 	: 	: 	: ' ' 'R ) 7=3I ^bei^i r$   