
    'iٖ                     <   d dl Z d dlZ d dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
mZmZ d dlmZ ddlmZmZmZmZ d Z eej.                  e   d      s! ej2                   ej4                               Zddd	d
d
dZdZ e       Zd Z ejB                  dv r e d       d Z"dZ# ejH                  dd       ejJ                  ed      ejL                  jO                  ejL                  jQ                  e      d    d      dejR                  jU                         ejB                  dk(  rdnd ejH                  dd      gZ+e+D ]  Z,e, e"e,      Z#e# n	  e-d      d Z.e j^                  Z0e j^                  Z1e j^                  Z2e jf                  Z4e jf                  Z5e jl                  Z7 G d de jp                        Z9 G d de jp                        Z: e.e#de jv                   e jx                  e j^                         e jx                  e j^                                e.e#de jz                  e j^                          e.e#de0e jv                  e jv                   e jx                  e4              e.e#d e0e4        e.e#d!e j|                  e0        e.e#d"e0e4        e.e#d#e0e4e j^                  e jf                          e.e#d$e0e4e j^                  e jf                          e.e#d%e0e4e j~                   e jx                  e j                        e jl                          e.e#d&e0e4e j~                   e jx                  e j                        e jl                          e.e#d'e0e4e j~                  e j~                  e j~                  e jl                          e.e#d(e0e4        e.e#d)e0e4e7        e.e#d*e0e4e j~                  e jl                  e jf                  e jf                  e jf                  e jf                  
        e.e#d+e0e4e j~                  e jl                  e j                          e.e#d,e0e4e j~                  e jl                  e j                  e jf                          e.e#d-e0e4e j~                  e jl                          e.e#d.e0e4e j~                  e jl                  e j                          e.e#d/e0e4e j                   e jx                  e jl                                e.e#d0e0e4 e jx                  e5              e.e#d1e0e jf                          e.e#d2e0e4e5        e.e#d3e0e4e5        e.e#d4e jl                  e4        e.e#d5e0e5e j^                  e jf                          e.e#d6e0e5e j^                  e jf                          e.e#d7e0e5        e.e#d8e0e4 e jx                   e jx                  e9             e jx                  e j                                e.e#d9e0e4 e jx                  e7      e j^                  e jf                  e jf                  e j~                  e j~                  
        e.e#d:e0e4e j^                          e j                  de4e j~                  e jl                  e jf                        ZC e j                  e jz                  e4e jf                        ZD e j                  e jz                  e4e j^                  e j~                  e j^                  e j                  e jf                        ZF e j                  de4e j^                  e j~                  e j^                  e j                  e jf                        ZG e j                  de4e j                  e jf                        ZH e j                  e j                  e4e j                  e j^                  e jf                        ZI e j                  de4e j                  e j^                  e j                  e jf                        ZJ e j                  de4e jf                        ZK e j                  e j                  e4e j                  e jf                  e jf                        ZL e j                  e j~                  e4e j~                  e j^                  e jf                        ZM e j                  de4e j~                  e j^                  e j~                  e jf                        ZN e j                  de4 e jx                  e:       e jx                  e:      e jf                        ZO e j                  de4e j~                  e j~                  e j~                  e jf                        ZP G d; d<eQ      ZRd= ZSd> ZTd? ZUd\d@ZVdA ZWdB ZX G dC dDe jp                        ZY G dE dFe jp                        ZZ G dG dHe jp                        Z[ G dI dJe jp                        Z\ G dK dLe jp                        Z] G dM dNe jp                        Z^ G dO dPe jp                        Z_ G dQ dRe jp                        Z` G dS dTe	j                        Zb G dU dVec      Zd G dW dXec      Ze G dY dZ      Zfd[ Zgy)]    N)wrapspartial)
namedtuple   )	x86_const	arm_constarm64_constunicorn_const__file__zlibunicorn.2.dylibzunicorn.dllzcygunicorn.dlllibunicorn.so.2)darwinwin32cygwinlinuxlinux2)zlibwinpthread-1.dllzlibgcc_s_seh-1.dllzlibgcc_s_dw2-1.dllc                 R   t         D ]  }|t        v rt        j                  j	                  | |      }d| vrd| vs t        j                  j                  |      sT	 t        j                  j                  |       t        j                  |        y # t        $ r
}Y d }~d }~ww xY w)N/\)_all_windows_dlls_loaded_windows_dllsospathjoinexistsctypescdllLoadLibraryaddOSError)r   dlllib_filees       E/root/launch/venv/lib/python3.12/site-packages/unicorn/unicorn_py2.py_load_win_supportr$   )   s      &&77<<c*tOD 0RWW^^H5M''1$((-  s   4B	B&!B&r   r    c                 0   	 t         j                  dv rt        |        t        j                  j                  | t        j                  t         j                  d            }t        j                  j                  |      }|S # t        $ r
}Y d }~y d }~ww xY w)Nr%   r   )sysplatformr$   r   r   r   _libgetr   r   r   r   )r   r!   r    r"   s       r#   	_load_libr,   ?   sl    
<<..d#77<<dhhs||=N&OPkk%%h/
 s   A?B 	BBLIBUNICORN_PATHlibr   z/usr/local/lib/z
/usr/lib64PATHz(ERROR: fail to load the dynamic library.c                 z    	 |t        | |      _        |t        | |      _        y # t        $ r t	        d      w xY w)NzeERROR: Fail to setup some function prototypes. Make sure you have cleaned your unicorn1 installation.)getattrrestypeargtypesAttributeErrorImportError)r.   fnamer2   r3   s       r#   _setup_prototyper7   m   sI    u&-U#'/U$ usu 	uus   "% :c                   ^    e Zd Zdej                  fdej                  fdej
                  fgZy)_uc_mem_regionbeginendpermsN)__name__
__module____qualname__r   c_uint64c_uint32_fields_     r#   r9   r9   ~   s-    	&//"	 	&//"HrD   r9   c                   b    e Zd ZdZdej
                  fdej                  fdej                  fgZy)uc_tbz"TranslationBlockpcicountsizeNr=   r>   r?   __doc__r   r@   c_uint16rB   rC   rD   r#   rF   rF      s0    	v	6??#	!HrD   rF   
uc_versionuc_arch_supporteduc_openuc_closeuc_strerroruc_errnouc_reg_readuc_reg_writeuc_mem_readuc_mem_writeuc_emu_startuc_emu_stopuc_hook_deluc_mmio_map
uc_mem_mapuc_mem_map_ptruc_mem_unmapuc_mem_protectuc_queryuc_context_allocuc_freeuc_context_saveuc_context_restoreuc_context_sizeuc_context_reg_readuc_context_reg_writeuc_context_freeuc_mem_regionsuc_hook_adduc_ctlc                       e Zd Zd Zd Zy)UcErrorc                     || _         y N)errno)selfro   s     r#   __init__zUcError.__init__   s	    
rD   c                 ^    t         j                  | j                        j                  d      S )Nascii)_ucrQ   ro   decoderp   s    r#   __str__zUcError.__str__   s     tzz*11'::rD   N)r=   r>   r?   rq   rw   rC   rD   r#   rl   rl      s    ;rD   rl   c                      t        j                         } t        j                         }t        j                  t        j                  |       t        j                  |            }| j
                  |j
                  |fS rn   )r   c_intrt   rM   byrefvalue)majorminorcombineds      r#   rM   rM      sO    LLNELLNE~~fll516<<3FGHKKh//rD   c                      t         j                  t         j                  t         j                  dz  t         j                  z   fS )N   )ucUC_API_MAJORUC_API_MINORrC   rD   r#   version_bindr      s.    
	A	0 rD   c                 ,    t         j                  |       S rn   )rt   rN   )querys    r#   rN   rN      s      ''rD   c                    |t         j                  k(  r|t        j                  t        j                  t        j
                  t        j                  fv rrt               } | |t        j                  |            }|t         j                  k7  rt        |      |j                  |j                  |j                  |j                  fS |t!        t        j"                  t        j"                  dz         v r\t%               } | |t        j                  |            }|t         j                  k7  rt        |      |j&                  |j(                  fS |t!        t        j*                  t        j*                  dz         v r`t-               } | |t        j                  |            }|t         j                  k7  rt        |      |j.                  |j0                  dz  z  S |t!        t        j2                  t        j2                  dz         v rt5               } | |t        j                  |            }|t         j                  k7  rt        |      |j6                  |j8                  dz  z  |j:                  dz  z  |j<                  dz  z  S |t        j>                  u rr|t        t         j@                        tC               }||_"         | |t        j                  |            }|t         j                  k7  rt        |      |jF                  S |t         jH                  k(  r|tJ        jL                  k(  rtO               }tQ        |tR              rtU        |      dk7  rt        t         j@                        |\  |_+        |_,        |_-        |_.        |_/        |_0        |_1         | |t        j                  |            }|t         j                  k7  rt        |      |jd                  S |t         jf                  k(  rs|th        jj                  k(  rtm               }tQ        |tR              rtU        |      dk7  rt        t         j@                        |\  |_.        |_/        |_7        |_8        |_9         | |t        j                  |            }|t         j                  k7  rt        |      |jd                  S |t!        th        jt                  th        jv                  dz         v s+t!        th        jx                  th        jz                  dz         r`t}               } | |t        j                  |            }|t         j                  k7  rt        |      |j.                  |j0                  dz  z  S t        j~                  d	      } | |t        j                  |            }|t         j                  k7  rt        |      |jF                  S )
Nr   @                  r   r   )@r   UC_ARCH_X86r   UC_X86_REG_IDTRUC_X86_REG_GDTRUC_X86_REG_LDTRUC_X86_REG_TR
uc_x86_mmrr   rz   	UC_ERR_OKrl   selectorbaselimitflagsxrangeUC_X86_REG_FP0uc_x86_float80mantissaexponentUC_X86_REG_XMM0
uc_x86_xmm	low_qword
high_qwordUC_X86_REG_YMM0
uc_x86_ymmfirst_qwordsecond_qwordthird_qwordfourth_qwordUC_X86_REG_MSR
UC_ERR_ARG
uc_x86_msrridr{   UC_ARCH_ARMr   UC_ARM_REG_CP_REGuc_arm_cp_reg
isinstancetuplelencpis64seccrncrmopc1opc2valUC_ARCH_ARM64r	   UC_ARM64_REG_CP_REGuc_arm64_cp_regop0op1op2UC_ARM64_REG_Q0UC_ARM64_REG_Q31UC_ARM64_REG_V0UC_ARM64_REG_V31uc_arm64_neon128r@   )reg_read_funcarchreg_idoptregstatuss         r#   reg_readr      sR   r~~i//1J1JILeLe--/ /,C"66<<+<=F%fo%<<399cii??VI44i6N6NQR6RSS "C"66<<+<=F%fo%<<--VI55y7P7PST7TUU,C"66<<+<=F%fo%==CNNb$899VI55y7P7PSU7UVV,C"66<<+<=F%fo%??c&6&6"&<=TWAWX\_\l\lps\sttY---{bmm,,,CCG"66<<+<=F%fo%99r~~Y000/Cc5)SX]bmm,,NQKCFCHcgsw38"66<<+<=F%fo%77Nr[444!#Cc5)SX]bmm,,:=7CGSWcgsw"66<<+<=F%fo%77Nvk99;;W;WZ[;[\\`f++[-I-IA-MaO"$C"66<<+<=F%fo%==CNNb$899 //!
C66<<#45Ffo99rD   c           	         d }|t         j                  k(  r|t        j                  t        j                  t        j
                  t        j                  fv rRt        |t              rt        |      dk(  sJ t               }|d   |_        |d   |_        |d   |_        |d   |_        |t        t        j                   t        j                   dz         v rt#               }|d   |_        |d   |_        |t        t        j(                  t        j(                  dz         v rt+               }|dz  |_        |dz	  |_        |t        t        j0                  t        j0                  d	z         v r8t3               }|dz  |_        |dz	  dz  |_        |d
z	  dz  |_        |dz	  |_        |t        j<                  u rt?               }|d   |_         |d   |_!        |t         jD                  k(  rv|t        tF        jH                  tF        jJ                  dz         v s+t        tF        jL                  tF        jN                  dz         rtQ               }|dz  |_        |dz	  |_        |t         jR                  k(  r|tF        jT                  k(  ritW               }t        |t              rt        |      dk7  rtY        t         jZ                        |\  |_.        |_/        |_0        |_1        |_2        |_3        n|th        jj                  k(  rttm               }t        |t              rt        |      dk7  rtY        t         jZ                        |\  |_7        |_8        |_9        |_.        |_/        |_:        |_;        |_3        |ty        jz                  |      } | |ty        j|                  |            }|t         j~                  k7  rtY        |      y )N   r   r         r   l    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   r   r   r   r   r   r   r   r   r{   r   r	   r   r   r   r   r   r   r   r   rl   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r@   rz   r   )reg_write_funcr   r   r{   r   r   s         r#   	reg_writer   B  s   
Cr~~i//1J1JILeLe--/ /eU+E
a??,C 8CLQxCHaCIaCIVI44i6N6NQR6RSS "C 8CL 8CLVI55y7P7PST7TUU,C!$66CM"b[CNVI55y7P7PSU7UVV,C#&88CO %/AAC$|/AACO$|CY---,CAhCGaCIrVK779U9UXY9YZZ^d++[-I-IA-M_O"$C!$66CM"b[CNr~~[444!#CeU+s5zQbmm,,CH@CGSWcgswy222/CeU+s5zQbmm,,W\TCFCHcgsw38SW
{ooe$FFLL$56Ffo
rD   c                 .     t                fd       }|S )Nc                     	  | g|i |S # t         $ r-}| j                  || _        | j                          Y d}~yd}~ww xY w)zCatches exceptions raised in hook functions.
        If an exception is raised, it is saved to the Uc object and a call to stop
        emulation is issued.
        N)BaseException_hook_exceptionemu_stop)rp   argskwargsr"   funcs       r#   wrapperz&_catch_hook_exception.<locals>.wrapper  sL    	.t.v.. 	##+'($MMOO	s    	A#A  A)r   )r   r   s   ` r#   _catch_hook_exceptionr     s     
4[  NrD   c            	           e Zd 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gZy
)r   z@ARM coprocessors registers for instructions MRC, MCR, MRRC, MCRRr   r   r   r   r   r   r   r   Nr=   r>   r?   rK   r   rA   r@   rB   rC   rD   r#   r   r     sl    J	v	!	 	 	 	!	!	 	HrD   r   c                       e Zd 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gZy)	r   z6ARM64 coprocessors registers for instructions MRS, MSRr   r   r   r   r   r   Nr   rC   rD   r#   r   r     sT    @	 	 	 	 	 	 HrD   r   c                   |    e Zd ZdZdej
                  fdej                  fdej                  fdej                  fgZy)r   zAMemory-Management Register for instructions IDTR, GDTR, LDTR, TR.r   r   r   r   N)	r=   r>   r?   rK   r   rL   r@   rA   rB   rC   rD   r#   r   r     s<    K	V__%	!	&//"	&//"	HrD   r   c                   D    e Zd Zdej                  fdej
                  fgZy)r   r   r{   N)r=   r>   r?   r   rA   r@   rB   rC   rD   r#   r   r     s!    	 	&//"HrD   r   c                   H    e Zd ZdZdej
                  fdej                  fgZy)r   Float80r   r   NrJ   rC   rD   r#   r   r     s$    	V__%	V__%HrD   r   c                   H    e Zd ZdZdej
                  fdej
                  fgZy)r   z128-bit xmm registerr   r   Nr=   r>   r?   rK   r   r@   rB   rC   rD   r#   r   r     s$    	foo&	v'HrD   r   c                   |    e Zd ZdZdej
                  fdej
                  fdej
                  fdej
                  fgZy)r   z256-bit ymm registerr   r   r   r   Nr   rC   rD   r#   r   r     s<    	(	)	(	)	HrD   r   c                   H    e Zd ZdZdej
                  fdej
                  fgZy)r   z128-bit neon registerr   r   Nr   rC   rD   r#   r   r     s$    	foo&	v'HrD   r   c                       e Zd Zy)UcRefN)r=   r>   r?   rC   rD   r#   r   r     s    rD   r   c                       e Zd Zd Zd Zd Zy)UcCleanupManagerc                     i | _         y rn   )_refsrv   s    r#   rq   zUcCleanupManager.__init__  s	    
rD   c                     t        || j                        }|j                  |_        |j                  |_        || j
                  t        |      <   y rn   )r   
_finalizer_uch	__class___classr   id)rp   r   refs      r#   registerzUcCleanupManager.register  s:    B(77\\
!

2c7rD   c                 z    | j                   t        |      = |j                  j                  |j                         y rn   )r   r   r   release_handler   )rp   r   s     r#   r   zUcCleanupManager._finalizer  s*     JJr#w

!!#((+rD   N)r=   r>   r?   rq   r   r   rC   rD   r#   r   r     s    ",rD   r   c                      e Zd Z e       Zd Zed        Zd;dZd Z	d<dZ
d Zd Zd	 Zd
 Zd Zd Zd Zd Zej(                  fdZd Zd Zej(                  f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#ed        Z$e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/ Z6d0 Z7d1 Z8d2 Z9d3 Z:d4 Z;d=d5Z<d6 Z=d7 Z>d8 Z?d9 Z@d: ZAy)>Ucc                    t               \  }}}|t        j                  k7  s|t        j                  k7  r d | _        t        t        j                        ||c| _        | _        t        j                         | _        t        j                  ||t        j                  | j                              }|t        j                  k7  rd | _        t        |      i | _        g | _        d| _        | j$                  j'                  |        d | _        y Nr   )rM   r   r   r   r   rl   UC_ERR_VERSION_arch_moder   c_void_prt   rO   rz   r   
_callbacks
_ctype_cbs_callback_count_cleanupr   r   )rp   r   moder|   r}   	_combinedr   s          r#   rq   zUc.__init__  s    $.L!y BOO#u'?DI"++,,!%t
DJOO%	T4dii)@AR\\!DI&/! t$#rD   c                     | r5	 t         j                  |       }|t        j                  k7  rt	        |      y y #  Y y xY wrn   )rt   rP   r   r   rl   )uchr   s     r#   r   zUc.release_handle  sB    c*R\\)!&/) * 
s   39 =c                     d | _         t        j                  | j                  ||||      }|t        j
                  k7  rt        |      | j                   | j                   y rn   )r   rt   rW   r   r   r   rl   )rp   r:   untiltimeoutcountr   s         r#   	emu_startzUc.emu_start(  sY    #!!$))UE7EJR\\!&/!+&&& ,rD   c                 ~    t         j                  | j                        }|t        j                  k7  rt        |      y rn   )rt   rX   r   r   r   rl   )rp   r   s     r#   r   zUc.emu_stop2  s/    +R\\!&/! "rD   Nc                 v    t        t        t        j                  | j                        | j
                  ||      S rn   )r   r   rt   rS   r   r   rp   r   r   s      r#   r   zUc.reg_read8  s'    ;TZZQTUUrD   c                 v    t        t        t        j                  | j                        | j
                  ||      S rn   )r   r   rt   rT   r   r   rp   r   r{   s      r#   r   zUc.reg_write<  s)    !1!1499=tzz6SXYYrD   c                 B    | j                  t        j                  |      S rn   )r   r   r   )rp   msr_ids     r#   msr_readzUc.msr_read@  s    }}Y55v>>rD   c                 F    | j                  t        j                  ||f      S rn   )r   r   r   )rp   r  r{   s      r#   	msr_writezUc.msr_writeD  s    ~~i66HHrD   c                     t        j                  |      }t        j                  | j                  |||      }|t
        j                  k7  rt        |      t        |      S rn   )	r   create_string_bufferrt   rU   r   r   r   rl   	bytearray)rp   addressrI   datar   s        r#   mem_readzUc.mem_readH  sJ    **40GT4@R\\!&/!rD   c                     t         j                  | j                  ||t        |            }|t        j
                  k7  rt        |      y rn   )rt   rV   r   r   r   r   rl   )rp   r  r  r   s       r#   	mem_writezUc.mem_writeP  s;    !!$))WdCIFR\\!&/! "rD   c                 <    | j                   |   \  }} || |||      S rn   r   )rp   handleoffsetrI   	user_datacbr  s          r#   _mmio_map_read_cbzUc._mmio_map_read_cbU  s%    __Y/
T$d++rD   c                 @    | j                   |   \  }} || ||||       y rn   r   )rp   r!  r"  rI   r{   r#  r$  r  s           r#   _mmio_map_write_cbzUc._mmio_map_write_cbY  s$    __Y/
T
4ud+rD   c           	         t        j                  t        | j                        t              }t        j                  t	        | j
                        t              }| xj                  dz  c_        ||f| j                  | j                  <   | j                  }	| xj                  dz  c_        ||f| j                  | j                  <   | j                  }
t        j                  | j                  ||||	||
      }|t        j                  k7  rt        |      | j                  j                  |       | j                  j                  |       y Nr   )r   castUC_MMIO_READ_CBr%  UC_MMIO_WRITE_CBr'  r  r   rt   rZ   r   r   r   rl   r  append)rp   r  rI   read_cbuser_data_readwrite_cbuser_data_writeinternal_read_cbinternal_write_cb
read_countwrite_countr   s               r#   mmio_mapzUc.mmio_map]  s   !;;t7M7M'NP_`"KK(89P9P(QScd!18.0I,,-))
!19?0K,,-**GT;KZYjlwxR\\!&/! 	/001rD   c                     t         j                  | j                  |||      }|t        j                  k7  rt        |      y rn   )rt   r[   r   r   r   rl   rp   r  rI   r<   r   s        r#   mem_mapz
Uc.mem_mapq  s5    		7D%@R\\!&/! "rD   c                     t         j                  | j                  ||||      }|t        j                  k7  rt        |      y rn   )rt   r\   r   r   r   rl   )rp   r  rI   r<   ptrr   s         r#   mem_map_ptrzUc.mem_map_ptrw  s9    ##DIIweSIR\\!&/! "rD   c                     t         j                  | j                  ||      }|t        j                  k7  rt        |      y rn   )rt   r]   r   r   r   rl   )rp   r  rI   r   s       r#   	mem_unmapzUc.mem_unmap}  s5    !!$))Wd;R\\!&/! "rD   c                     t         j                  | j                  |||      }|t        j                  k7  rt        |      y rn   )rt   r^   r   r   r   rl   r8  s        r#   mem_protectzUc.mem_protect  s7    ##DIIweDR\\!&/! "rD   c                     t        j                  d      }t        j                  | j                  |t        j
                  |            }|t        j                  k7  rt        |      |j                  S r   )
r   c_size_trt   r_   r   rz   r   r   rl   r{   )rp   
query_moderesultr   s       r#   r   zUc.query  sO    #diiV\\&5IJR\\!&/!||rD   c                 @    | j                   |   \  }} || ||||       y rn   r   )rp   r!  r  arg1arg2r#  r$  r  s           r#   _hook_tcg_op_cbzUc._hook_tcg_op_cb  s$    __Y/
T
4$i0rD   c                 f    | j                   |   \  }} || |j                  |j                  |       y rn   )r   contents)rp   r!  curprevr#  r$  r  s          r#   _hook_edge_gen_cbzUc._hook_edge_gen_cb  s*    __Y/
T
4t}}i8rD   c                 >    | j                   |   \  }} || |||       y rn   r   )rp   r!  r  rI   r#  r$  r  s          r#   _hookcode_cbzUc._hookcode_cb  s$     __Y/
T
4$%rD   c                 @    | j                   |   \  }} || |||||      S rn   r   	rp   r!  accessr  rI   r{   r#  r$  r  s	            r#   _hook_mem_invalid_cbzUc._hook_mem_invalid_cb  s+     __Y/
T$ud;;rD   c                 B    | j                   |   \  }} || |||||       y rn   r   rQ  s	            r#   _hook_mem_access_cbzUc._hook_mem_access_cb  s(     __Y/
T
4$t4rD   c                 <    | j                   |   \  }} || ||       y rn   r   )rp   r!  intnor#  r$  r  s         r#   _hook_intr_cbzUc._hook_intr_cb  s"     __Y/
T
4rD   c                 8    | j                   |   \  }} || |      S rn   r   rp   r!  r#  r$  r  s        r#   _hook_insn_invalid_cbzUc._hook_insn_invalid_cb  s"     __Y/
T$~rD   c                 <    | j                   |   \  }} || |||      S rn   r   )rp   r!  portrI   r#  r$  r  s          r#   _hook_insn_in_cbzUc._hook_insn_in_cb  s'     __Y/
T$dD))rD   c                 T   t        j                  |t        j                  t                    j                  }t        dg d      }| j                  |   \  }} || | ||j                  |j                  |j                  |j                  |j                  |j                        |      S )Nuc_arm64_cp_reg_tuple)r   r   r   r   r   r   )r   r*  POINTERr   rJ  r   r   r   r   r   r   r   r   )	rp   r!  r   pcp_regr#  cp_regr`  r$  r  s	            r#   _hook_insn_sys_cbzUc._hook_insn_sys_cb  s    Wfnn_&EFOO *+BDn o__Y/
T$'

FJJ

FJJX^XbXbdjdndnoquw 	wrD   c                 @    | j                   |   \  }} || ||||       y rn   r   )rp   r!  r]  rI   r{   r#  r$  r  s           r#   _hook_insn_out_cbzUc._hook_insn_out_cb  s&     __Y/
T
4tUD)rD   c                 :    | j                   |   \  }} || |       y rn   r   rZ  s        r#   _hook_insn_syscall_cbzUc._hook_insn_syscall_cb  s     __Y/
T
4rD   c                     t        j                  | j                  |g| }|t        j                  k7  rt        |      |S rn   )rt   rj   r   r   r   rl   )rp   controlr   r   s       r#   ctlzUc.ctl  s6    DIIw66R\\!&/!rD   c                     ||dz  z  |dz  z  S )N      rC   )rp   rk  nrrws       r#   __ctlzUc.__ctl  s    bBh28,,rD   c                 D    | j                  ||t        j                        S rn   )_Uc__ctlr   UC_CTL_IO_READrp   rk  ro  s      r#   __ctl_rz
Uc.__ctl_r  s    zz#r2#4#455rD   c                 D    | j                  ||t        j                        S rn   )rs  r   UC_CTL_IO_WRITEru  s      r#   __ctl_wz
Uc.__ctl_w  s    zz#r2#5#566rD   c                 D    | j                  ||t        j                        S rn   )rs  r   UC_CTL_IO_READ_WRITEru  s      r#   __ctl_rwzUc.__ctl_rw  s    zz#r2#:#:;;rD   c                      |       }| j                  | j                  |d      t        j                  |             |j                  S r)  )rk  
_Uc__ctl_rr   rz   r{   )rp   rk  ctpargs       r#   __ctl_r_1_argzUc.__ctl_r_1_arg  s5    ec1%v||C'89yyrD   c                 X     ||      }| j                  | j                  |d      |       y r)  rk  
_Uc__ctl_w)rp   rk  r   r  r  s        r#   __ctl_w_1_argzUc.__ctl_w_1_arg  s$    #hc1%s+rD   c                 j     ||      } ||      }| j                  | j                  |d      ||       y Nr   r  )rp   rk  val1val2ctp1ctp2rF  rG  s           r#   __ctl_w_2_argzUc.__ctl_w_2_arg  s/    DzDzc1%tT2rD   c                      ||      } |       }| j                  | j                  |d      |t        j                  |             |S r  )rk  _Uc__ctl_rwr   rz   )rp   rk  r   r  r  rF  rG  s          r#   __ctl_rw_1_1_argzUc.__ctl_rw_1_1_arg  s;    CyvsA&fll4.@ArD   c                 ^    | j                  t        j                  t        j                        S rn   )_Uc__ctl_r_1_argr   UC_CTL_UC_MODEr   ry   rv   s    r#   ctl_get_modezUc.ctl_get_mode      !!""3"3V\\BBrD   c                 ^    | j                  t        j                  t        j                        S rn   )r  r   UC_CTL_UC_PAGE_SIZEr   rA   rv   s    r#   ctl_get_page_sizezUc.ctl_get_page_size      !!""8"8&//JJrD   c                 b    | j                  t        j                  |t        j                         y rn   )_Uc__ctl_w_1_argr   r  r   rA   rp   r   s     r#   ctl_set_page_sizezUc.ctl_set_page_size  s    2113HrD   c                 ^    | j                  t        j                  t        j                        S rn   )r  r   UC_CTL_UC_ARCHr   ry   rv   s    r#   ctl_get_archzUc.ctl_get_arch  r  rD   c                 ^    | j                  t        j                  t        j                        S rn   )r  r   UC_CTL_UC_TIMEOUTr   r@   rv   s    r#   ctl_get_timeoutzUc.ctl_get_timeout  s    !!""6"6HHrD   c                 b    | j                  t        j                  |t        j                         y rn   )r  r   UC_CTL_UC_USE_EXITSr   ry   r  s     r#   ctl_exits_enabledzUc.ctl_exits_enabled
  s    2113ErD   c                 ^    | j                  t        j                  t        j                        S rn   )r  r   UC_CTL_UC_EXITS_CNTr   rB  rv   s    r#   ctl_get_exits_cntzUc.ctl_get_exits_cnt  r  rD   c                 F   | j                         }t        j                  |z         }| j                  | j	                  t
        j                  d      t        j                  |t        j                        t        j                  |             |D cg c]  }| c}S c c}w r  )
r  r   r@   rk  r~  r   UC_CTL_UC_EXITSr*  r   rB  )rp   larris       r#   ctl_get_exitszUc.ctl_get_exits  sr    ""$"%b00!4fkk#v6WY_YhYhijYklas   	Bc           	      R   t        j                  t        |      z         }t        |      D ]
  \  }}|||<    | j	                  | j                  t        j                  d      t        j                  |t         j                        t        j                  t        |                   y r  )r   r@   r   	enumeraterk  r  r   r  r*  r   rB  )rp   exitsr  idxexits        r#   ctl_set_exitszUc.ctl_set_exits  s{    U+."5) 	ICCH	b00!4fkk#v6WY_YhYhilmrisYturD   c                 ^    | j                  t        j                  t        j                        S rn   )r  r   UC_CTL_CPU_MODELr   ry   rv   s    r#   ctl_get_cpu_modelzUc.ctl_get_cpu_model  s    !!""5"5v||DDrD   c                 b    | j                  t        j                  |t        j                         y rn   )r  r   r  r   ry   r  s     r#   ctl_set_cpu_modelzUc.ctl_set_cpu_model  s    2..V\\BrD   c                     | j                  t        j                  ||t        j                  t        j                         y rn   )_Uc__ctl_w_2_argr   UC_CTL_TB_REMOVE_CACHEr   r@   )rp   addrr;   s      r#   ctl_remove_cachezUc.ctl_remove_cache"  s)    244dCRXRaRabrD   c                 j    | j                  t        j                  |t        j                  t
              S rn   )_Uc__ctl_rw_1_1_argr   UC_CTL_TB_REQUEST_CACHEr   r@   rF   )rp   r  s     r#   ctl_request_cachezUc.ctl_request_cache%  s$    $$R%?%?vX]^^rD   c                     t               }| xj                  dz  c_        ||f| j                  | j                  <   d }	|t        j                  k(  rt        j                  |      }
|t        j                  k(  r-t        j                  t        | j                        t              }	|t        j                  k(  r-t        j                  t        | j                        t              }	|t        j                  t        j                   fv r-t        j                  t#        | j$                        t"              }	|t&        j(                  t&        j*                  t&        j,                  t&        j.                  fv r-t        j                  t1        | j2                        t0              }	t4        j7                  | j8                  t        j:                  |      ||	t        j                  | j                  t
        j<                        t        j>                  |      t        j>                  |      |
      }n|t        j@                  k(  rt        j                  |      }t        j                  |      }t4        j7                  | j8                  t        j:                  |      |t        j                  tC        | jD                        tB              t        j                  | j                  t
        j<                        t        j>                  |      t        j>                  |      ||	      }n|t        jF                  k(  rt        j                  tI        | jJ                        tH              }	t4        j7                  | j8                  t        j:                  |      ||	t        j                  | j                  t
        j<                        t        j>                  |      t        j>                  |            }nJ|t        jL                  k(  rt        j                  tO        | jP                        tN              }	t4        j7                  | j8                  t        j:                  |      ||	t        j                  | j                  t
        j<                        t        j>                  |      t        j>                  |            }n~|t        jR                  k(  rt        j                  tU        | jV                        tT              }	t4        j7                  | j8                  t        j:                  |      ||	t        j                  | j                  t
        j<                        t        j>                  |      t        j>                  |            }n|t        jX                  t        jZ                  fv rt        j                  t]        | j^                        t\              }	t4        j7                  | j8                  t        j:                  |      ||	t        j                  | j                  t
        j<                        t        j>                  |      t        j>                  |            }n|t        j`                  t        jb                  z  t        jd                  z  t        jf                  z  t        jh                  z  t        jj                  z  z  rt        j                  tm        | jn                        tl              }	t4        j7                  | j8                  t        j:                  |      ||	t        j                  | j                  t
        j<                        t        j>                  |      t        j>                  |            }nt        j                  tq        | jr                        tp              }	t4        j7                  | j8                  t        j:                  |      ||	t        j                  | j                  t
        j<                        t        j>                  |      t        j>                  |            }| jt                  jw                  |	       |t        jx                  k7  rt{        |      |j|                  S r)  )?	uc_hook_hr  r   r   UC_HOOK_INSNr   ry   r   UC_X86_INS_INr*  UC_HOOK_INSN_IN_CBr^  UC_X86_INS_OUTUC_HOOK_INSN_OUT_CBrf  UC_X86_INS_SYSCALLUC_X86_INS_SYSENTERUC_HOOK_INSN_SYSCALL_CBrh  r	   UC_ARM64_INS_MRSUC_ARM64_INS_MSRUC_ARM64_INS_SYSUC_ARM64_INS_SYSLUC_HOOK_INSN_SYS_CBrd  rt   ri   r   rz   r   r@   UC_HOOK_TCG_OPCODEUC_HOOK_TCG_OPCODE_CBrH  UC_HOOK_INTRUC_HOOK_INTR_CBrX  UC_HOOK_INSN_INVALIDUC_HOOK_INSN_INVALID_CBr[  UC_HOOK_EDGE_GENERATEDUC_HOOK_EDGE_GEN_CBrM  UC_HOOK_BLOCKUC_HOOK_CODEUC_HOOK_CODE_CBrO  UC_HOOK_MEM_READ_UNMAPPEDUC_HOOK_MEM_WRITE_UNMAPPEDUC_HOOK_MEM_FETCH_UNMAPPEDUC_HOOK_MEM_READ_PROTUC_HOOK_MEM_WRITE_PROTUC_HOOK_MEM_FETCH_PROTUC_HOOK_MEM_INVALID_CBrS  UC_HOOK_MEM_ACCESS_CBrU  r  r-  r   rl   r{   )rp   htypecallbackr#  r:   r;   rF  rG  _h2r$  insnr   opcoder   s                 r#   hook_addzUc.hook_add)  s   k 	!1990E,,-BOO#<<%Dy...[[!3D4I4I!JL^_y///[[!4T5K5K!LNab	44i6S6STT[[!89S9S!TVmn44k6R6RT_TpTp#557 7[[!4T5K5K!LNab__		6<<,eRD00&//B&(<dF
 b+++\\$'FLL&E__		6<<,e1$2F2FGI^_D00&//B&(<fe	F boo%_T-?-?@/RB__		6<<,eRD00&//B&(<F
 b---4T5O5OPRijB__		6<<,eRD00&//B&(<F
 b///01G1GHJ]^B__		6<<,eRD00&//B&(<F ))2??;; [[1B1B!C_UIIv||C0%KK 4 4fooFOOE*FOOC,@
 "66778778 223 33	4
 334 5 [[!78Q8Q!RTjkIIv||C0%KK 4 4fooFOOE*FOOC,@ [[!6t7O7O!PRghIIv||C0%KK 4 4fooFOOE*FOOC,@ 	r"R\\!&/!yyrD   c                     t        |      }t        j                  | j                  |      }|t        j
                  k7  rt        |      d}y r   )r  rt   rY   r   r   r   rl   )rp   h_hr   s       r#   hook_delzUc.hook_del  s:    q\B/R\\!&/!rD   c                     t        | j                  | j                  | j                        }t        j                  | j                  |j                        }|t        j                  k7  rt        |      |S rn   )
	UcContextr   r   r   rt   rb   contextr   r   rl   rp   r  r   s      r#   context_savezUc.context_save  sQ    DIItzz4::>$$TYY@R\\!&/!rD   c                     t         j                  | j                  |j                        }|t        j
                  k7  rt        |      y rn   )rt   rb   r   r  r   r   rl   r  s      r#   context_updatezUc.context_update  s7    $$TYY@R\\!&/! "rD   c                     t         j                  | j                  |j                        }|t        j
                  k7  rt        |      y rn   )rt   rc   r   r  r   r   rl   r  s      r#   context_restorezUc.context_restore  s7    ''		7??CR\\!&/! "rD   c              #   ,  K    t        j                  t                     }t        j                         }t        j                  | j                  t        j                  |      t        j                  |            }|t        j                  k7  rt        |      	 t        |j                        D ]0  }||   j                  ||   j                  ||   j                  f 2 	 t        j!                  |       y # t        j!                  |       w xY wwrn   )r   ra  r9   rA   rt   rh   r   rz   r   r   rl   r   r{   r:   r;   r<   ra   )rp   regionsr  r   r  s        r#   mem_regionszUc.mem_regions  s     0&..02!##DIIv||G/DfllSXFYZR\\!&/!	!EKK( Kqz''9I9IJJK KK CKK s   BDAC: $D:DD)r   r   rn   )Nr   r   r   r   )Br=   r>   r?   r   r  rq   staticmethodr   r  r   r   r   r  r  r  r  r%  r'  r6  r   UC_PROT_ALLr9  r<  r>  r@  r   r   rH  rM  rO  rS  rU  rX  r[  r^  rd  rf  rh  rk  rs  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  rC   rD   r#   r   r     s    !H$.  '"VZ?I"
,,2( ,.>> """ 02~~ " 1 1 9 9 & &
 < <
 5 5
  
  
 * *
 w w * *
  
-67<
,3
CKICIFK vECc_[|"
"!rD   r   c                   x    e Zd Zd Zed        Zed        Zed        Zed        ZddZ	d Z
d	 Zd
 Zd Zd Zy)r  c                 "   t               | _        t        j                  |      | _        d| _        t        j                  |t        j                  | j                              }|t        j                  k7  rt        |      || _        || _        y )NT)
uc_context_contextrt   rd   _size_to_freer`   r   rz   r   r   rl   r   r   )rp   r  r   r  r   s        r#   rq   zUcContext.__init__  sg    "((+
%%admm)DER\\!&/!

rD   c                     | j                   S rn   )r   rv   s    r#   r  zUcContext.context  s    }}rD   c                     | j                   S rn   )r  rv   s    r#   rI   zUcContext.size      zzrD   c                     | j                   S rn   )r   rv   s    r#   r   zUcContext.arch  r  rD   c                     | j                   S rn   )r   rv   s    r#   r  zUcContext.mode  r  rD   Nc                 v    t        t        t        j                  | j                        | j
                  ||      S rn   )r   r   rt   re   r   r   r  s      r#   r   zUcContext.reg_read  s*     7 7GTZ\_``rD   c                 v    t        t        t        j                  | j                        | j
                  ||      S rn   )r   r   rt   rf   r   r   r  s      r#   r   zUcContext.reg_write  s*    !9!94==I499V\^cddrD   c                 \    t        |       | j                  | j                  | j                  fS rn   )bytesrI   r   r  rv   s    r#   __getstate__zUcContext.__getstate__  s!    dTYY		499==rD   c                     |d   | _         t        j                  t        j                  |d   | j                         t              | _        d| _        |d   | _        |d   | _        y )Nr   r   Fr   r   )	r  r   r*  r  r  r   r  r   r   )rp   states     r#   __setstate__zUcContext.__setstate__  sR    1X
F$?$?a$**$UWab1X
1X
rD   c                 V    t        j                  | j                  | j                        S rn   )r   	string_atr  rI   rv   s    r#   	__bytes__zUcContext.__bytes__  s    dii88rD   c                 \    | j                   r t        j                  | j                         y y rn   )r  rt   rg   r   rv   s    r#   __del__zUcContext.__del__  s     ==. rD   rn   )r=   r>   r?   rq   propertyr  rI   r   r  r   r   r  r  r  r  rC   rD   r#   r  r    sw            ae>9/rD   r  c            	         t         j                  t         j                  t         j                  t         j                  t         j
                  t         j                  t         j                  t         j                  d} d}| j                         }t        |      D ]  }t        | |         s|d|z  z  } t               \  }}}d|||t         j                  t         j                  fz  S )N)armarm64mipssparcm68kx86riscvppcr&   z-%szpython-%s-c%u.%u-b%u.%u)r   r   r   UC_ARCH_MIPSUC_ARCH_SPARCUC_ARCH_M68Kr   UC_ARCH_RISCVUC_ARCH_PPCkeyssortedrN   rM   r   r   )archs	all_archsr$  kr|   r}   r  s          r#   debugr)    s    ~~!!!!~~!!~~	E I::<DD\ #U1X&"I# )lE5)$5%"//(  rD   rn   )hr   ctypes.utildistutils.sysconfig	distutilsinspectos.pathr   pkg_resourcesr(   weakref	functoolsr   r   collectionsr   r&   r   r   r	   r
   r   
ucsubclasshasattrmodulesr=   getfilecurrentframer   r*   r   setr   r$   r)   r,   rt   getenvresource_filenamer   r   split	sysconfigget_python_lib
_path_list_pathr5   r7   ry   ucerruc_modeuc_archr   	uc_enginer  rB  r  	Structurer9   rF   c_uintra  c_boolc_char_pr@   c_charrA   	CFUNCTYPEr  r  c_int64r  r  r  r  r  r  r  r+  r,  r  r  	Exceptionrl   rM   r   rN   r   r   r   r   r   r   r   r   r   r   r   r   r   objectr   r   r  r)  rC   rD   r#   <module>rM     s         
  $ "
 E D 
s{{8$j1w3w3356H&""#	%  u $ <<&&b  bii)40-m--h>ggll277==215u=!!002#&<<8#;bii#%
  BE}h
E
C
B
 @
AAu 	
,,
,,OO	__
OO	V%% F  lFMM>6>>&,,3OQ_QWQ_Q_`f`l`lQm n )6==&,, G iv}}nfnnU^F_ ` j% 3 mV__e < j% 3 mUIv||V__ U neYfoo V mUIvW]WdWdHegmgvgv w neYX^XeXeIfhnhwhw x neYZ`ZiZi" mUI 6 mUIy A mUIvY_YhYh&//6??D lE9foovX^XgXg h &y&//6??\b\k\k" neY Y &y&//6??\b\k\k l j%FOO^V^^TZTcTcEd e (%NFNN:<V W i 8 '	: F *E9j I ') D +UJfoo ^ ,eZv _ '
 ; &y.&..XfIg:h02 mUI~v~~i7PRXR^R^`f`o`o&//6??D hy&,, ?"&""4FOOV__V\VeVef*&**6==)V__U )))
MM9fll
OOV\\6>>6??  )(()V\\
OOV\\6>>6??  #&"")V__foo &V%%
OOYv  'f&&)V__
LL&//6??  +&**4FOOL &f&&v	6??TZTcTceketetu "&""
OOYv $6##)V__fllFOOV__  'f&&)^V^^E*NFNN5,A6??  )(()V__foov ;i ;0(
HV;|&F$$ 	f&& 	!! !! V%% !! !! v'' 	GKK 	
,v ,:i! i!X5/ 5/rrD   