
    >fƨ                     d   d dl Z d dlZd dlmZ ej        d          dk     ZereZg dZdZ	d Z
e	Ze
ZdZdeeefz  Zd ZdZdZdZd	ZdZd
ZdZdZdZdZdZdZdZdZdZdZdZ dZ!dZ"d Z#d Z$dZ%d	Z&dZ'dZ(dZ)dZ*dZ+dZ,dZ-dZ.dZ/dZ0dZ1dZ2dZ3dZ4d	Z5dZ6dZ7dZ8dZ9dZ:e&Z;e'Z<dZ=d	Z>dZ?dZ@dZAdZBdZCdZDdZEdZFd ZGdZHdZIdZJd	ZKdZLd	ZMdZNdZOdZPdZQePeQz  ZRdZSd	ZTdZUdZVdZWdZXdZYdZZd	Z[dZ\dZ]dZ^dZ_dZ`d ZadZbdZcdZdd	ZedZfd
ZgdZhdZidZjd ZkdZld ZmdZndZodZpd	ZqdZrd
ZsdZtdZudZvdZwdZxdZydZzdZ{dZ|dZ}dZ~d ZdZdZdZd	ZdZd
ZdZd ZdZdZdZd	ZdZdZdZdZdZd ZdZdZdZd	ZdZd
ZdZdZdZdZdZdZdZdZe"dz   Ze"dz   Zd  e                                            D             Zd   e                                            D             Zd!  e                                            D             Zd"  e                                            D             Zd#  e                                            D             Zd$  e                                            D             Zd%  e                                            D             Zd dlZd dlZd d&lmZmZmZ d dlZd dlZd dlZ eej        e         d'          s ej         ej                              Zej        d(k    rd)Znej        d*v rd+Znd,Zd-Zd. ZdZ e j        d/d           ej        ed0           e ee          d          d0          d1ej                                        ej        d(k    rd2nd3gZeD ]ZeĀ eeĦ          Ze n ed4          d5 Zd6 Zdd7lmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ  G d8 d9ej                  Z G d: d;ej                  Z G d< d=ej                  Z ej        ej         ej        ej                  ej        ej        ej                  Z G d> d?ej                  Z G d@ dAej                  ZdB Z eedCej        ej        ej         ej        ej                              eedDej        ej         ej        ej                  ej        ej        ej         ej         ej        eߦ                    	  	          eedEdej        ej                    eedFej         ej        ej                              eedGej        ej        ej                    eedHej        ej        ej                    eedIej        ej        ej                    eedJej        ej         ej        eߦ          ej                    eedKej        ej         ej        eߦ          ej        ej                    eedLej        ej                    eedMej        ej        ej        ej                    eedNej         ej        ej                   ej        ej                              eedOej        ej                    eedPej        ej                    eedQej        ej         ej        eߦ           ej        ej        dz             ej        ej                   ej        ej        dz             ej        ej                  	  	          G dR dSe          ZdT ZdU ZdV Z G dW dXe          ZdadYZdadZZd[ Z G d\ d]e          Z G d^ d_e          Zd` ZdS )b    N)system   )CsCsInsncs_disasm_quickcs_disasm_lite
cs_version
cs_supportversion_binddebugCS_API_MAJORCS_API_MINORCS_VERSION_MAJORCS_VERSION_MINORCS_VERSION_EXTRACS_ARCH_ARMCS_ARCH_ARM64CS_ARCH_MIPSCS_ARCH_X86CS_ARCH_PPCCS_ARCH_SPARCCS_ARCH_SYSZCS_ARCH_XCORECS_ARCH_M68KCS_ARCH_TMS320C64XCS_ARCH_M680XCS_ARCH_EVMCS_ARCH_MOS65XXCS_ARCH_WASMCS_ARCH_BPFCS_ARCH_RISCV
CS_ARCH_SHCS_ARCH_TRICORECS_ARCH_ALLCS_MODE_LITTLE_ENDIANCS_MODE_BIG_ENDIAN
CS_MODE_16
CS_MODE_32
CS_MODE_64CS_MODE_ARMCS_MODE_THUMBCS_MODE_MCLASSCS_MODE_MICROCS_MODE_MIPS3CS_MODE_MIPS32R6CS_MODE_MIPS2
CS_MODE_V8
CS_MODE_V9CS_MODE_QPXCS_MODE_SPECS_MODE_BOOKE
CS_MODE_PSCS_MODE_M68K_000CS_MODE_M68K_010CS_MODE_M68K_020CS_MODE_M68K_030CS_MODE_M68K_040CS_MODE_M68K_060CS_MODE_MIPS32CS_MODE_MIPS64CS_MODE_M680X_6301CS_MODE_M680X_6309CS_MODE_M680X_6800CS_MODE_M680X_6801CS_MODE_M680X_6805CS_MODE_M680X_6808CS_MODE_M680X_6809CS_MODE_M680X_6811CS_MODE_M680X_CPU12CS_MODE_M680X_HCS08CS_MODE_BPF_CLASSICCS_MODE_BPF_EXTENDEDCS_MODE_RISCV32CS_MODE_RISCV64CS_MODE_RISCVCCS_MODE_MOS65XX_6502CS_MODE_MOS65XX_65C02CS_MODE_MOS65XX_W65C02CS_MODE_MOS65XX_65816CS_MODE_MOS65XX_65816_LONG_MCS_MODE_MOS65XX_65816_LONG_XCS_MODE_MOS65XX_65816_LONG_MXCS_MODE_SH2CS_MODE_SH2ACS_MODE_SH3CS_MODE_SH4CS_MODE_SH4ACS_MODE_SHFPUCS_MODE_SHDSPCS_MODE_TRICORE_110CS_MODE_TRICORE_120CS_MODE_TRICORE_130CS_MODE_TRICORE_131CS_MODE_TRICORE_160CS_MODE_TRICORE_161CS_MODE_TRICORE_162CS_OPT_SYNTAXCS_OPT_SYNTAX_DEFAULTCS_OPT_SYNTAX_INTELCS_OPT_SYNTAX_ATTCS_OPT_SYNTAX_NOREGNAMECS_OPT_SYNTAX_MASMCS_OPT_SYNTAX_MOTOROLACS_OPT_SYNTAX_CS_REG_ALIASCS_OPT_DETAILCS_OPT_MODE	CS_OPT_ON
CS_OPT_OFFCS_OPT_INVALID
CS_OPT_MEMCS_OPT_SKIPDATACS_OPT_SKIPDATA_SETUPCS_OPT_MNEMONICCS_OPT_UNSIGNEDCS_OPT_NO_BRANCH_OFFSET	CS_ERR_OK
CS_ERR_MEMCS_ERR_ARCHCS_ERR_HANDLE
CS_ERR_CSHCS_ERR_MODECS_ERR_OPTIONCS_ERR_DETAILCS_ERR_VERSIONCS_ERR_MEMSETUPCS_ERR_DIETCS_ERR_SKIPDATACS_ERR_X86_ATTCS_ERR_X86_INTELCS_ERR_X86_MASMCS_SUPPORT_DIETCS_SUPPORT_X86_REDUCECS_SKIPDATA_CALLBACKCS_OP_INVALID	CS_OP_REG	CS_OP_IMMCS_OP_FP
CS_OP_PREDCS_OP_RESERVED_5CS_OP_RESERVED_6CS_OP_RESERVED_7CS_OP_RESERVED_8CS_OP_RESERVED_9CS_OP_RESERVED_10CS_OP_RESERVED_11CS_OP_RESERVED_12CS_OP_RESERVED_13CS_OP_RESERVED_14CS_OP_RESERVED_15CS_OP_SPECIAL	CS_OP_MEMCS_GRP_INVALIDCS_GRP_JUMPCS_GRP_CALL
CS_GRP_RET
CS_GRP_INTCS_GRP_IRETCS_GRP_PRIVILEGECS_GRP_BRANCH_RELATIVECS_AC_INVALID
CS_AC_READCS_AC_WRITECsError__version__      z%u.%u.%u               	   
                           i      @      l           i   i   c                 D    i | ]\  }}|                     d           ||S )CS_AC_
startswith.0kvs      `/home/panchajanya/Development/work/volatility3/lib/python3.11/site-packages/capstone/__init__.py
<dictcomp>r   q  /    FFFCAaq||H/E/EFAaFFF    c                 D    i | ]\  }}|                     d           ||S )CS_ARCH_r   r   s      r   r   r   r  /    HHHCAaq||J/G/GHAaHHHr   c                 D    i | ]\  }}|                     d           ||S )CS_ERR_r   r   s      r   r   r   s  /    GGGCAaq||I/F/FGAaGGGr   c                 D    i | ]\  }}|                     d           ||S )CS_GRP_r   r   s      r   r   r   t  r   r   c                 D    i | ]\  }}|                     d           ||S )CS_MODE_r   r   s      r   r   r   u  r   r   c                 D    i | ]\  }}|                     d           ||S )CS_OP_r   r   s      r   r   r   v  r   r   c                 D    i | ]\  }}|                     d           ||S )CS_OPT_r   r   s      r   r   r   w  r   r   )splitjoindirname__file__darwinzlibcapstone.dylib)win32cygwinzcapstone.dllzlibcapstone.soFc                    t          | t                    }t          j                            |          rt
          j                            |          S |                    d          rtt          j                            |d	                    t                    z             r:t
          j                            |d	                    t                    z             S d S )Nz.soz.{})r   _libospathexistsctypescdllLoadLibraryendswithformatr   )r   lib_files     r   	_load_libr     s    D$H	w~~h Z{&&x000 U## 	Zw~~h6F)G)GGHH Z{..x%,,GW:X:X/XYYY4r   LIBCAPSTONE_PATHlib z/usr/local/lib/z
/usr/lib64z(ERROR: fail to load the dynamic library.c           	           t          |                       }t          j        t          j        |          t          j        |           t          j        t          |                                |S )zFReturns a new ctypes object which is a bitwise copy of an existing one)typer   memmovebyrefsizeof)srcdsts     r   copy_ctypesr     sP    
$s))++C
N6<$$fl3&7&7tCyy9Q9QRRRJr   c                     d | D             S )Nc                 ,    g | ]}t          |          S  )r   )r   ns     r   
<listcomp>z$copy_ctypes_list.<locals>.<listcomp>  s    (((qKNN(((r   r   )r   s    r   copy_ctypes_listr     s    ((C((((r   )armarm64m68kmipsppcsparcsystemzx86xcore
tms320c64xm680xevmmos65xxwasmbpfriscvshtricorec                   2   e Zd Zdej        fdej        fdej        fde	j
        fdej        fdej        fdej        fdej        fd	ej        fd
ej        fdej        fdej        fdej        fdej        fdej         fde!j"        fde#j$        fde%j&        ffZ'dS )_cs_archr   r   r   r   r  r   r   syszr  r  r  r  r  r  r  r	  r
  r  N)(__name__
__module____qualname__r   CsArm64r   CsArmr   CsM68Kr   CsMipsr  CsX86r   CsPpcr   CsSparcr   CsSyszr  CsXcorer  CsTMS320C64xr  CsM680xr  CsEvmr  	CsMOS65xxr  CsWasmr  CsBPFr	  CsRISCVr
  CsSHr  	CsTriCore_fields_r   r   r   r  r    s        	%- 									%- 	 	%- 	z./	%- 			G%&				%- 	rw	G%&%HHHr   r  c            	           e Zd Zdej        dz  fdej        fdej        dz  fdej        fdej        dz  fdej        fd	ej        fd
effZdS )
_cs_detail	regs_read   regs_read_count
regs_writeregs_write_countgroupsr   groups_count	writebackarchN)	r  r  r  r   c_uint16c_ubytec_boolr  r$  r   r   r   r&  r&    sr        	fo*+	FN+	v+,	V^,	6>A%&	(	fm$		HHHr   r&  c            
           e Zd Zdej        fdej        fdej        fdej        dz  fdej        dz  fdej        d	z  fd
 ej	        e
          ffZdS )_cs_insnidaddresssizebytes   mnemonicr   op_str   detailN)r  r  r  r   c_uintc_uint64r0  r1  c_charPOINTERr&  r$  r   r   r   r4  r4    st        	v}	FO$	!	&.2%&	V]R'(	6=3&'	>6>*--.HHHr   r4  c                   8    e Zd Zdej        fdefdej        ffZdS )_cs_opt_skipdatar:  callback	user_dataN)r  r  r  r   c_char_pr   c_void_pr$  r   r   r   rC  rC    s2        	V_%	)*	fo&HHHr   rC  c                   2    e Zd Zdej        fdej        ffZdS )_cs_opt_mnemr5  r:  N)r  r  r  r   r>  rF  r$  r   r   r   rI  rI    s)        	v}	V_%HHHr   rI  c                 Z    |t          | |          _        |t          | |          _        d S N)getattrrestypeargtypes)r   fnamerM  rN  s       r   _setup_prototyperP    s,    ")GC#+GC   r   cs_open	cs_disasmcs_freecs_closecs_reg_namecs_insn_namecs_group_namecs_op_countcs_op_indexcs_errno	cs_optionr	   r
   cs_strerrorcs_regs_accessc                   (    e Zd Zd Zerd ZdS d ZdS )r   c                     || _         d S rK  )errno)selfr`  s     r   __init__zCsError.__init__  s    


r   c                 @    t                               | j                  S rK  )_csr\  r`  ra  s    r   __str__zCsError.__str__  s    ??4:...r   c                 d    t                               | j                                                  S rK  )rd  r\  r`  decodere  s    r   rf  zCsError.__str__  s"    ??4:..55777r   N)r  r  r  rb  _python2rf  r   r   r   r   r     sU            8	/ 	/ 	/ 	/ 	/	8 	8 	8 	8 	8r   r   c                      t          j                    } t          j                    }t                              t          j        |           t          j        |                    }| j        |j        |fS rK  )r   c_intrd  r	   r   value)majorminorcombineds      r   r	   r	      sP    LNNELNNE~~fl5116<3F3FGGHKh//r   c                  @    t           t          t           dz  t          z   fS )Nr   )r   r   r   r   r   r   r   (  s    ,):l(JKKr   c                 6    t                               |           S rK  )rd  r
   )querys    r   r
   r
   ,  s    >>%   r   c                       e Zd Zd ZdS )	_dummy_csc                 0    || _         || _        d| _        d S NF)cshr/  _detail)ra  rw  r/  s      r   rb  z_dummy_cs.__init__3  s    	r   N)r  r  r  rb  r   r   r   rt  rt  2  s#            r   rt  c           
   #     K   t                      \  }}}|t          k    s|t          k    rt          t                    t          j                    }t                              | |t          j	        |                    }	|	t          k    rt          |	           t          j        t                                }
t                              ||t          |          ||t          j	        |
                    }|dk    rv	 t          |          D ](}t!          t#          ||           |
|                   V  )	 t                              |
|           nV# t                              |
|           w xY wt                              |          }	|	t          k    rt          |	          d S t                              t          j	        |                    }	|	t          k    rt          |	          d S Nr   )r	   r   r   r   r~   r   c_size_trd  rQ  r   rv   rA  r4  rR  lenranger   rt  rS  rZ  rT  )r/  modecodeoffsetcountrm  rn  	_combinedrw  statusall_insnresis                r   r   r   <  s      *UE9 5 5n%%%
/

C[[tV\#%6%677Ffoo'v~h''))H
--T3t99feV\(=S=S
T
TC
Qww	'3ZZ @ @YsD118A;??????@ KK#&&&&CKK#&&&&c""Y&//! \\&,s++,,Ffoo s    8E E2c           
   #   ~  K   t                      \  }}}|t          k    s|t          k    rt          t                    t          t                    rt          t                    t          j	                    }t                              | |t          j        |                    }	|	t          k    rt          |	           t          j        t                                }
t                              ||t#          |          ||t          j        |
                    }|dk    r	 t%          |          D ]L}|
|         }|j        |j        |j                            d          |j                            d          fV  M	 t                              |
|           nV# t                              |
|           w xY wt                              |          }	|	t          k    rt          |	          d S t                              t          j        |                    }	|	t          k    rt          |	          d S Nr   ascii)r	   r   r   r   r~   r
   r   r   r   r{  rd  rQ  r   rv   rA  r4  rR  r|  r}  r6  r7  r:  rh  r;  rS  rZ  rT  )r/  r~  r  r  r  rm  rn  r  rw  r  r  r  r  insns                 r   r   r   a  s      *UE9 5 5n%%%/"" #k"""
/

C[[tV\#%6%677Ffoo'v~h''))H
--T3t99feV\(=S=S
T
TC
Qww	'3ZZ l l{|TY0D0DW0M0Mt{OaOabiOjOjkkkkkl KK#&&&&CKK#&&&&c""Y&//! \\&,s++,,Ffoo s   (AF! !F>c                 4    | |n|                      d          S Nr  )rh  )namedefaults     r   _ascii_name_or_defaultr    s    l77G(<(<<r   c                   .   e Zd Zd Zd Zed             Zed             Zed             Zed             Z	ed             Z
ed             Zed	             Zed
             Zed             Zd Zd Zd ZddZddZddZd Zd Zd Zd Zd Zd ZdS )r   c           
         t          |          | _        || _        | j        j        r| j        j        dk    rt          j        |j                                                  | j        _        t          j	        t          j
        | j        j        d                   t          j
        |j        d                   t          j        t          |j        d                                        d S d S d S rz  )r   _rawrd  rx  r5  r   pointerr=  _type_r   r   r   r   )ra  csall_infos      r   rb  zCsInsn.__init__  s    ))	8 	I	 1 1%~ho.D.D.F.FGGDIN6<	(8(;<<fl8?[\K]>^>^`f`mnrs{  tC  DE  tF  oG  oG  aH  aH  I  I  I  I  I	I 	I 1 1r   c                 `    d| j         | j                                        | j        | j        fz  S )Nz<CsInsn 0x%x [%s]: %s %s>)r6  r8  hexr:  r;  re  s    r   __repr__zCsInsn.__repr__  s*    *dlDJNN<L<Ldm]a]h-iiir   c                     | j         j        S rK  )r  r5  re  s    r   r5  z	CsInsn.id  s    y|r   c                     | j         j        S rK  )r  r6  re  s    r   r6  zCsInsn.address  s    y  r   c                     | j         j        S rK  )r  r7  re  s    r   r7  zCsInsn.size  s    y~r   c                 X    t          | j        j                  d | j        j                 S rK  )	bytearrayr  r8  r7  re  s    r   r8  zCsInsn.bytes  s!    ))/49>/::r   c                     | j         j        rt          t                    | j        j                            d          S r  )rd  _dietr   r   r  r:  rh  re  s    r   r:  zCsInsn.mnemonic  s5    8> 	'+&&&y!((111r   c                     | j         j        rt          t                    | j        j                            d          S r  )rd  r  r   r   r  r;  rh  re  s    r   r;  zCsInsn.op_str  s5    8> 	'+&&&y&&w///r   c                 .   | j         j        dk    rt          t                    | j        j        rt          t                    | j        j        r2| j         j        j	        j
        d | j         j        j	        j                 S t          t                    rz  )r  r5  r   r   rd  r  r   rx  r=  contentsr'  r)  r}   re  s    r   r'  zCsInsn.regs_read  s|    9<1/***8> 	'+&&&8 	c9#,67a	8H8Q8a7abbm$$$r   c                 .   | j         j        dk    rt          t                    | j        j        rt          t                    | j        j        r2| j         j        j	        j
        d | j         j        j	        j                 S t          t                    rz  )r  r5  r   r   rd  r  r   rx  r=  r  r*  r+  r}   re  s    r   r*  zCsInsn.regs_write  s|    9<1/***8> 	'+&&&8 	e9#,78c9I9R9c8cddm$$$r   c                 .   | j         j        dk    rt          t                    | j        j        rt          t                    | j        j        r2| j         j        j	        j
        d | j         j        j	        j                 S t          t                    rz  )r  r5  r   r   rd  r  r   rx  r=  r  r,  r-  r}   re  s    r   r,  zCsInsn.groups  s|    9<1/***8> 	'+&&&8 	]9#,34[TY5E5N5[4[\\m$$$r   c                    | j         j        dk    rd S | j        j        }|t          k    rrt          j        | j         j        j        j        j                  \  | _	        | _
        | _        | _        | _        | _        | _        | _        | _        | _        | _        d S |t(          k    rNt+          j        | j         j        j        j        j                  \  | _        | _        | _        | _        | _        d S |t,          k    rt/          j        | j         j        j        j        j                  \  | _        | _        | _        | _        | _        | _        | _        | _        | _         | _!        | _"        | _#        | _$        | _%        | _&        | _'        | _(        | _)        | _*        | _+        | _,        | _-        | _.        | _        d S |t^          k    r<ta          j        | j         j        j        j        j0                  \  | _        | _1        d S |td          k    r4tg          j        | j         j        j        j        j3                  | _        d S |th          k    rHtk          j        | j         j        j        j        j5                  \  | _6        | _7        | _8        | _        d S |tr          k    rBtu          j        | j         j        j        j        j:                  \  | _        | _;        | _        d S |tx          k    r<t{          j        | j         j        j        j        j>                  \  | _        | _        d S |t~          k    r4t          j        | j         j        j        j        j@                  | _        d S |t          k    rHt          j        | j         j        j        j        jB                  \  | _C        | _D        | _E        | _        d S |t          k    r<t          j        | j         j        j        j        jG                  \  | _H        | _        d S |t          k    rBt          j        | j         j        j        j        jJ                  \  | _K        | _L        | _M        d S |t          k    rBt          j        | j         j        j        j        jO                  \  | _P        | _Q        | _        d S |t          k    r4t          j        | j         j        j        j        jS                  | _        d S |t          k    r4t          j        | j         j        j        j        jU                  | _        d S |t          k    r<t          j        | j         j        j        j        jW                  \  | _X        | _        d S |t          k    rBt          j        | j         j        j        j        jZ                  \  | _[        | _\        | _        d S |t          k    r<t          j        | j         j        j        j        j^                  \  | _        | _        d S d S rz  )_r  r5  rd  r/  r   r   get_arch_infor=  r  usermodevector_sizevector_datacps_modecps_flagccupdate_flagsr.  
post_indexmem_barrieroperandsr   r   r   r  prefixopcoderex	addr_sizemodrmsibdisp	sib_index	sib_scalesib_basexop_ccsse_ccavx_ccavx_saeavx_rmeflags	fpu_flagsencodingmodrm_offsetdisp_offset	disp_size
imm_offsetimm_sizer   r   op_sizer   r   r   r   bcbh
update_cr0r   r   hintr   r   r  r   r  r   r  	conditionfunitparallelr   r  flagsr   r  poppushfeer   r  ammodifies_flagsr   r  r    r  r!   r	  need_effective_addrr"   r
  sh_insnsh_sizer#   r  )ra  r/  s     r   __gen_detailzCsInsn.__gen_detail  s   9<1Fx};PSPabfbkbrb{  cA  cE  QF  QFNT]D,d.>t}^b^egkgxNDOT-=t}}}]""#DI$4$=$B$HII YTWd'$---[   "%!2493C3L3Q3U!V!VT[$+tx
DHdit{DKT\4;T^t0$2BDNTXTceier\!!040B49CSC\CaCf0g0g-\!! $ 2493C3L3Q3V W W[  !$)"2";"@"DEE ?TWdgt]""272EdiFVF_FdFj2k2k/TWdi\!!'.'<TY=M=V=[=`'a'a$TWdmmm]""#1$)2B2K2P2VWWT]]]'''ISIabfbkbrb{  cA  cL  JM  JMFT^TZ]""*/*=di>N>W>\>b*c*c'TZ[  .1.?	@P@Y@^@b.c.c+TXty$(((_$$<C<QRVR[RbRkRpRx<y<y9TWd)4===\!!"01A1J1O1TUUT]]][  !/	0@0I0N0RSST]]]]""8=8KDIL\LeLjLp8q8q5T%t}}}Z:<:J49K[KdKiKl:m:m7T\4<_$$181FtyGWG`GeGm1n1n.T %$r   c                 `   | j         j        st          t                    t          j        } || d          j        st          |           || d          }d|vr|                                  ||vr3| j        j	        dk    rt          t                    t          |          ||         S )Nrd  __dict__r  r   )rd  rx  r   r}   object__getattribute__AttributeError_CsInsn__gen_detailr  r5  r   )ra  r  attr_dicts       r   __getattr__zCsInsn.__getattr__  s    x 	)-(((&tD%  ( 	' &&&T:&&U""uy|q  o... &&&T{r   c                 J    t                               | j         j                  S rK  rd  rZ  rw  re  s    r   r`  zCsInsn.errno.  s    ||DHL)))r   Nc                     | j         j        rt          t                    t	          t                               | j         j        |          |          S rK  )rd  r  r   r   r  rU  rw  ra  reg_idr  s      r   reg_namezCsInsn.reg_name2  s>    8> 	'+&&&%coodhlF&K&KWUUUr   c                     | j         j        rt          t                    | j        j        dk    r|S t          t                               | j         j        | j                  |          S rz  )	rd  r  r   r   r  r5  r  rV  rw  )ra  r  s     r   	insn_namezCsInsn.insn_name:  sV    8> 	'+&&&9<1N%c&6&6tx|TW&M&MwWWWr   c                     | j         j        rt          t                    t	          t                               | j         j        |          |          S rK  )rd  r  r   r   r  rW  rw  ra  group_idr  s      r   
group_namezCsInsn.group_nameE  sA    8> 	'+&&&%c&7&7h&O&OQXYYYr   c                     | j         j        dk    rt          t                    | j        j        rt          t                    || j        v S rz  )r  r5  r   r   rd  r  r   r,  )ra  r  s     r   groupzCsInsn.groupN  sF    9<1/***8> 	'+&&&4;&&r   c                     | j         j        dk    rt          t                    | j        j        rt          t                    || j        v S rz  )r  r5  r   r   rd  r  r   r'  ra  r  s     r   reg_readzCsInsn.reg_readY  sF    9<1/***8> 	'+&&&''r   c                     | j         j        dk    rt          t                    | j        j        rt          t                    || j        v S rz  )r  r5  r   r   rd  r  r   r*  r  s     r   	reg_writezCsInsn.reg_writed  sF    9<1/***8> 	'+&&&((r   c                     | j         j        dk    rt          t                    d}| j        D ]}|j        |k    r|dz  }|S Nr   r   r  r5  r   r   r  r   )ra  op_typecops       r   op_countzCsInsn.op_counto  sQ    9<1/***- 	 	Bw'!!Qr   c                     | j         j        dk    rt          t                    d}| j        D ]}|j        |k    r|dz  }||k    r|c S d S r  r  )ra  r  positionr  r  s        r   op_findzCsInsn.op_findz  sl    9<1/***- 	 	Bw'!!QH}}			 	 	r   c           
         | j         j        dk    rt          t                    t	          j        dz              }t	          j                    }t	          j        dz              }t	          j                    }t                              | j        j	        | j         t	          j
        |          t	          j
        |          t	          j
        |          t	          j
        |                    }|t          k    rt          |          |j        dk    r|d |j                 }ng }|j        dk    r|d |j                 }ng }||fS )Nr   r   )r  r5  r   r   r   r0  c_uint8rd  r]  rw  r   rv   rl  )ra  r'  r)  r*  r+  r  s         r   regs_accesszCsInsn.regs_access  sO   9<1/***_r),,	 .**o*--
!>++##DHL$)V\)=T=TV\VbcrVsVsu{  vB  CM  vN  vN  PV  P\  ]m  Pn  Pn  o  oY&//! 1$$!"8?#8"89III!A%%#$;%5%;$;<JJJ:&&r   rK  )r  r  r  rb  r  propertyr5  r6  r7  r8  r:  r;  r'  r*  r,  r  r  r`  r  r  r  r  r  r  r  r   r  r   r   r   r   r     s       I I Ij j j   X ! ! X!   X ; ; X; 2 2 X2 0 0 X0 % % X% % % X% % % X%1o 1o 1oh  "* * *V V V VX X X XZ Z Z Z' ' '( ( () ) )  	 	 	' ' ' ' 'r   r   c                   0   e Zd Zd Zd Zed             Zed             Zed             Zej	        d             Zed             Z
e
j	        d             Z
ed	             Zej	        d
             Zed             Zej	        d             Zed             Zej	        d             Zd Zd Zed             Zej	        d             Zed             Zej	        d             Zed             Zej	        d             Zd ZddZddZddZd dZd dZdS )!r   c                    t                      \  }}}|t          k    s|t          k    rd | _        t	          t
                    ||c| _        | _        t          j	                    | _        t                              ||t          j        | j                            }|t          k    rd | _        t	          |          	 ddlm} |                    |           j        | _        n#  Y nxY w|t$          k    rt&          | _        nd | _        d| _        d| _        t/          t0                    | _        t/          t4                    | _        d| _        d| _        t=                      | _        d| _         d S )Nr   	ccapstoneFz.byte)NN)!r	   r   r   rw  r   r~   r/  _moder   r{  rd  rQ  r   rv   r   r  r   disasmr   re   _syntaxrx  _imm_unsignedr
   r   r  r   
_x86reduce_skipdata_mnem_skipdata_cbrC  _skipdata_opt	_skipdata)ra  r/  r~  rm  rn  r  r  r  s           r   rb  zCs.__init__  sM   $.LL!yL  E\$9$9DH.))) $d	4:?$$T4dh)?)?@@YDH&//!	#######,,t,,3DKK	D;.DLLDL"00
$%:;; &( .//s    %C& &C*c                     | j         rV	 t                              t          j        | j                             }|t
          k    rt          |          d S #  Y d S xY wd S rK  )rw  rd  rT  r   r   rv   r   )ra  r  s     r   __del__z
Cs.__del__  sg    8 	fl48&<&<==Y&&!&//) '&	 	s   AA Ac                     | j         S rK  )r  re  s    r   dietzCs.diet  
    zr   c                     | j         S rK  )r  re  s    r   
x86_reducezCs.x86_reduce  s
    r   c                     | j         S rK  )r  re  s    r   syntaxz	Cs.syntax  
    |r   c                     t                               | j        t          |          }|t          k    rt          |          || _        d S rK  )rd  r[  rw  rc   rv   r   r  )ra  styler  s      r   r  z	Cs.syntax  s;    tx>>Y&//!r   c                     | j         S rK  )r  re  s    r   skipdatazCs.skipdata  s
    ~r   c                    |dk    r,t                               | j        t          t                    }n+t                               | j        t          t
                    }|t          k    rt          |          || _        d S rv  )	rd  r[  rw  rq   rn   rm   rv   r   r  ra  optr  s      r   r  zCs.skipdata   s_    %<<]]48_jIIFF]]48_iHHFY&//! r   c                 "    | j         f| j        z   S rK  )r  r  re  s    r   skipdata_setupzCs.skipdata_setup  s    #%(999r   c           	         |\  }}}|                                 | j        _        t          |pd          | j        _        t          j        |t
          j                  | j        _        t          
                    | j        t          t          j        t          j        | j                  t
          j                            }|t          k    rt          |          || _        ||f| _        d S rz  )encoder  r:  r   rD  r   castrG  rE  rd  r[  rw  rr   r   rv   r   r  r  )ra  r"  _mnem_cb_udr  s         r   r$  zCs.skipdata_setup  s    sC&+llnn#&:38!&D&D#'-{3'H'H$tx)>FLY]YkLlLlntn}@~@~Y&//!# #Jr   c                     | j         S rK  )r  re  s    r   skipdata_mnemzCs.skipdata_mnem   s    ""r   c                 &    |f| j         z   | _        d S rK  )r  r$  )ra  mnems     r   r,  zCs.skipdata_mnem%  s    #g(99r   c                     | j         S rK  )r  re  s    r   skipdata_callbackzCs.skipdata_callback*  s      r   c                 `    t          |t                    s|d f}|\  }}| j        ||f| _        d S rK  )
isinstancetupler  r$  )ra  valfuncdatas       r   r0  zCs.skipdata_callback/  s>    #u%% 	+C
d#2D$?r   c           	      T   t                      }||_        |r|                                |_        n||_        t                              | j        t          t          j	        t          j
        |          t          j                            }|t          k    rt          |          d S rK  )rI  r5  r&  r:  rd  r[  rw  rs   r   r'  r   rG  rv   r   )ra  r5  r.  	_mnem_optr  s        r   mnemonic_setupzCs.mnemonic_setup8  s     NN		 	&!%I!%Itx&+flS\F]F]_e_n:o:oppY&//! r   c                      t          |          S rK  )r
   )ra  rr  s     r   supportz
Cs.supportF  s    %   r   c                     | j         S rK  )rx  re  s    r   r=  z	Cs.detailK  r  r   c                    |dk    r,t                               | j        t          t                    }n+t                               | j        t          t
                    }|t          k    rt          |          || _        d S rv  )	rd  r[  rw  rk   rn   rm   rv   r   rx  r!  s      r   r=  z	Cs.detailQ  s]    %<<]]48]JGGFF]]48]IFFFY&//!r   c                     | j         S rK  )r  re  s    r   imm_unsignedzCs.imm_unsigned^  s    !!r   c                    |dk    r,t                               | j        t          t                    }n+t                               | j        t          t
                    }|t          k    rt          |          || _        d S rv  )	rd  r[  rw  rt   rn   rm   rv   r   r  r!  s      r   r?  zCs.imm_unsignedd  s`    %<<]]48_jIIFF]]48_iHHFY&//! r   c                     | j         S rK  )r	  re  s    r   r~  zCs.modeq  r  r   c                     t                               | j        t          |          }|t          k    rt          |          || _        d S rK  )rd  r[  rw  rl   rv   r   r	  r!  s      r   r~  zCs.modew  s;    txc::Y&//!


r   c                 @    t                               | j                  S rK  r  re  s    r   r`  zCs.errno  s    ||DH%%%r   Nc                     | j         rt          t                    t          t                              | j        |          |          S rK  )r  r   r   r  rd  rU  rw  r  s      r   r  zCs.reg_name  s:    : 	'+&&&%coodh&G&GQQQr   c                     | j         rt          t                    t          t                              | j        |          |          S rK  )r  r   r   r  rd  rV  rw  )ra  insn_idr  s      r   r  zCs.insn_name  s<    : 	'+&&&%c&6&6tx&I&I7SSSr   c                     | j         rt          t                    t          t                              | j        |          |          S rK  )r  r   r   r  rd  rW  rw  r  s      r   r  zCs.group_name  s<    : 	'+&&&%c&7&7(&K&KWUUUr   r   c           
   #   
  K    t          j        t                                }	 t          |          }t	          |          }|j        s2t          j        t           j                            |                    }n)t          |t                    s|                                }t                              | j        ||||t          j        |                    }|dk    ri	 t          |          D ]}t!          | ||                   V  	 t                              ||           d S # t                              ||           w xY wt                              | j                  }	|	t&          k    rt)          |	          d S rz  )r   rA  r4  r|  
memoryviewreadonlyr   r@  from_bufferr2  r8  tobytesrd  rR  rw  r}  r   rS  rZ  rv   r   )
ra  r  r  r  r  r7  viewr  r  r  s
             r   r
  z	Cs.disasm  sW     +6>(++--	
 4yy$} 	"< 9 9$ ? ?@@DDD%(( 	"<<>>DmmDHdD&%hAWAWXX77+s 4 4A x{3333334 Hc*****Hc****\\$(++F""foo%Fs   "*D* *Ec           
   #     K   | j         rt          t                     t          j        t
                                }t          |          }t          |          }|j        s2t          j	        t          j
                            |                    }n)t          |t                    s|                                }t                              | j        ||||t          j	        |                    }|dk    r	 t%          |          D ]L}||         }	|	j        |	j        |	j                            d          |	j                            d          fV  M	 t                              ||           d S # t                              ||           w xY wt                              | j                  }
|
t4          k    rt          |
          d S r  )r  r   r   r   rA  r4  r|  rI  rJ  r   r@  rK  r2  r8  rL  rd  rR  rw  r}  r6  r7  r:  rh  r;  rS  rZ  rv   )ra  r  r  r  r  r7  rM  r  r  r  r  s              r   disasm_litezCs.disasm_lite  s     : 	'+&&&+6>(++--4yy$} 	"< 9 9$ ? ?@@DDD%(( 	"<<>>DmmDHdD&%hAWAWXX77+s p pA#A;D<DM4H4H4Q4QSWS^SeSefmSnSnooooop Hc*****Hc****\\$(++F""foo%Fs   <AE6 6FrK  r   )r  r  r  rb  r  r  r  r  r  setterr  r$  r,  r0  r9  r;  r=  r?  r~  r`  r  r  r  r
  rO  r   r   r   r   r     s       ' ' 'X     X
   X
   X
 ]  ]   X
 _	 	 _	 : : X: 
' 
' 
' # # X# : : : ! ! X! @ @ @	" 	" 	"! ! !
   X
 ]  ] " " X"
 ! ! !   X
 
[  [& & &R R R RT T T TV V V V   >     r   r   c                     	 ddl m}  |                                 S #  Y nxY wt          t                    rd}nd}i dt
          dt          dt          dt          d	t          d
t          dt          dt          dt          dt          dt          dt           dt"          dt$          dt&          dt(          dt*          }d}|                                }t/          |          D ]}t          ||                   r|d|z  z  } t          t0                    r|dz  }t          t2                    r|dz  }t5                      \  }}}d||||t6          t8          fz  S )Nr   r  r  standardr   r   r   r   r   r   r  r  r  r  r  r  r  r	  r  r  r
  r   z-%sz-x86_reducezpython-%s%s-c%u.%u-b%u.%u)r   r  r   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r#   r   r"   keyssortedr   r   r	   r   r   )	r  r  archs	all_archsrU  r   rm  rn  r  s	            r   r   r     s      /"" {#]4:L#[29= 	 &} 7CDV 		 !&{	 5>	
 	{
 $]
 5> 	 #JE I::<<DD\\ # #eAh 	#"I+ #V	+,, 	#"I *UE9&$	5%Wc)ddds     rP  )r   sysplatformr   version_infori  xranger}  __all__r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   CS_ARCH_MAXr$   r%   r*   r'   r(   r)   r+   r,   r1   r-   r.   r/   r0   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r&   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   rY   rZ   r[   r\   r]   r^   r_   r`   ra   rb   ro   rc   rk   rl   rp   rq   rr   rs   rt   ru   rn   rm   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rd   re   rf   rg   rh   ri   rj   rv   rw   rx   ry   rz   r{   r|   r}   r   r~   r   r   r   r   r   r   r   localsitemsCS_ACCS_ARCHCS_ERRCS_GRPCS_MODECS_OPCS_OPTr   ctypes.utilos.pathr   r   r   distutils.sysconfig	distutilspkg_resourcesinspecthasattrmodulesr  getfilecurrentframer   r   _foundr   rd  getenvresource_filename	sysconfigget_python_lib
_path_list_pathImportErrorr   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r  r  r	  r
  r  Unionr  	Structurer&  r4  	CFUNCTYPEr{  rA  r@  rG  r   rC  rI  rP  rk  r>  r?  rF  r2  r0  r  	Exceptionr   r	   r   r
   r  rt  r   r   r  r   r   r   r   r   r   <module>r~     s&         A" Er r rn      +-=?OPP  
  



 

                         &  &  <?[ [         
   
	 		
           	 

   
        #  	

  /#A  GF6688>>++FFFHH6688>>++HHHGG6688>>++GGGGG6688>>++GGGHH6688>>++HHHFF6688>>++FFFGG6688>>++GGG         ( ( ( ( ( ( ( ( ( (         ws{8$j11 7w3w35566H<8DD\(((DDD		 	 	  bi*D11-m-h>>d55??1%u--!0022#&<8#;#;O
  B BE}h
)E

C

+@
A
AA
  ) ) ) F  F  F  F  F  F  F  F  F  F  F  F  F  F  F  F  F  F  F  F  F  F  F  F  F  F  F  F  F  F  F  F  F  F  F  F  F  F  F  F    v|   ,
 
 
 
 
! 
 
 
	 	 	 	 	v 	 	 	 (v'9V9VX^Xgioix  {A  {J  K  K     v'       6#   , , ,  iv}fm^V^\b\kMlMl m m m  k6?FO^V^TZTaEbEbdjds.&.9Q9Q*R*RT T T  iv H H H  j&,v0O0O P P P  mV_fov} U U U  nfov V V V  ov W W W  mV\6?NFNS[D\D\^d^k l l l  mV\6?NFNS[D\D\^d^kmsmz { { {  j&, @ @ @  k6<&,PVP_ ` ` `  lFL.&.2N2NP^PVP^_e_kPlPl m m m  lFM6< @ @ @  mV_fl C C C  &fo~v~V^G_G_aoagaopvp  AC  qC  bD  bD  FT  FL  FT  U[  Uc  Fd  Fd  ft  fl  ft  u{  uD  EG  uG  fH  fH  JX  JP  JX  Y_  Yg  Jh  Jh  i  i  i
8 
8 
8 
8 
8i 
8 
8 
80 0 0L L L! ! !          J" " " "H= = =
T' T' T' T' T'V T' T' T'ps s s s s s s sn	$e $e $e $e $er   