
    9c                     r    d dl Z d dlZd dlZd dlmZmZmZ  G d de      Z	 G d de      Z
 G d de      Zy)	    N)ModuleOptionKwargc                       e Zd Zd Zy)
ArchResultc                     t         j                  j                  j                  |      D ]  \  }}t	        | ||        y Nbinwalkcorecompatiteratorsetattrselfkwargskvs       8/usr/lib/python3/dist-packages/binwalk/modules/disasm.py__init__zArchResult.__init__	   6    ll))226: 	 FQD!Q	     N__name__
__module____qualname__r    r   r   r   r           r   r   c                       e Zd Zd Zy)Architecturec                     t         j                  j                  j                  |      D ]  \  }}t	        | ||        y r	   r
   r   s       r   r   zArchitecture.__init__   r   r   Nr   r   r   r   r    r       r   r   r    c                      e Zd ZdZdZdZdZ eddddid	       ed
deddidez         eddddid      gZ	 e
dd       e
dd       e
de      gZ eej                  ej                  ej                   d       eej                  ej                  ej"                  d       eej$                  ej                  ej                   d       eej$                  ej                  ej"                  d       eej&                  ej                   ej                   d       eej(                  ej*                  ej                   d       eej(                  ej*                  ej"                  d       eej                  ej,                  ej"                  d       eej                  ej,                  ej                   d       g	Zd! Zd" Zd# Zy$)%Disasm
   i  zDisassembly ScanYdisasmenabledTzGIdentify the CPU architecture of a file using the capstone disassembler)shortlongr   descriptionTminsnmin_insn_countr   zOMinimum number of consecutive instructions to be considered valid (default: %d))r(   r)   typer   r*   continuer   
keep_goingzDon't stop at the first match)r)   r(   r   r*   F)namedefaultz'ARM executable code, 32-bit, big endian)r.   mode
endiannessr*   z*ARM executable code, 32-bit, little endianz'ARM executable code, 64-bit, big endianz*ARM executable code, 64-bit, little endianz*PPC executable code, 32/64-bit, big endianz+MIPS executable code, 32/64-bit, big endianz.MIPS executable code, 32/64-bit, little endianz2ARM executable code, 16-bit (Thumb), little endianz/ARM executable code, 16-bit (Thumb), big endianc                 N   g | _         | j                  s| j                  | _        | j                  dz  | _        | j                  D ]^  }| j                   j                  t        j                  |j                  |j                  |j                  z         |j                  f       ` y )Nr$   )disassemblersr-   DEFAULT_MIN_INSN_COUNTdisasm_data_sizeARCHITECTURESappendcapstoneCsr.   r3   r4   r*   )r   archs     r   initzDisasm.init]   s    """&"="=D $ 3 3b 8&& 	qD%%x{{499tyy4???Z'\^b^n^n&op	qr   c           	      P   d}	 d }|j                         \  }}|dk  ry t        t        |            dk\  rTd}||k  r||j                  | j                  k  rt
        j                  j                  j                  |||| j                  z          }t        t        |            dk\  r| j                  D ]  \  }}	|j                  |||z         D 
cg c]  }
|
 }}
t
        j                  j                  j                  d||z   |	t        |      fz         t        |      | j                  k\  s||r@|j                  |	k(  r1|xj                  dz  c_        |j                  | j                  k\  s n!t!        ||z   |j"                  z   |	|d      } |dz  }| j$                  xj&                  dz  c_        ||k  r|h|j                  | j                  k  r|| j)                  |j"                  ||j                  dt        |j*                        z  z         }|j,                  r^|j.                  rR| j0                  j2                  r/|j*                  D ]   \  }}}}| j)                  |||d|       " | j4                  sy ||z  }|| j$                  _        c c}
w )	Nr         z+0x%.8X   %s, at least %d valid instructions)offsetr*   insnscountz , at least %d valid instructions)rB   filer*    )
read_blocklensetrD   	THRESHOLDr   r   r   	str2bytesr8   r6   disasm_litecommondebugr-   r*   r   rB   status	completedresultrC   validdisplayconfigverboser0   )r   fp
total_readrQ   datadlenblock_offset
code_blockmdr*   insnrC   rpositionsizemnemopndss                    r   	scan_filezDisasm.scan_fileh   s   
F==?LT4ax
 3t9~"  $d*6<<RVR`R`C` ")!4!4!>!>tLQ]`d`u`uQu?v!wJ
 3z?+q0151C1C 1-R68nnZR\_kRk6m$ndT$nE$n#LL//556chr  vB  iBQ\QTUZQ[g] 7] ^  #5zT-@-@@ $*f.@.@K.O$*LLA$5L'-||t~~'E(--7z(4@579yy@A4?.3./	.1F#1. !A%LKK))Q.)E $d*6<<RVR`R`C`H %6==)+171C1CFhknouo{o{k|F|1| $ A ww199;;..AG k =4u $8"]achRi jk#"$J$.DKK!A 4 %os   	J#c                     t        | j                  d       D ]3  }| j                          | j                  |       | j	                          5 y r	   )iter	next_fileheaderrc   footer)r   rV   s     r   runz
Disasm.run   s:    t~~t, 	BKKMNN2KKM	r   N)r   r   r   rJ   r7   TITLEORDERr   intCLIr   KWARGSr    r;   CS_ARCH_ARMCS_MODE_ARMCS_MODE_BIG_ENDIANCS_MODE_LITTLE_ENDIANCS_ARCH_ARM64CS_ARCH_PPCCS_ARCH_MIPS
CS_MODE_64CS_MODE_THUMBr9   r>   rc   ri   r   r   r   r#   r#      s*   I EE 	S $'d	f 	S'+l  pF  F		G
 	J#T*:	<C" 	9e,</#-CDF 	(..".. ( ; ;!J	L 	(..".. ( > >!M	O 	(00".. ( ; ;!J	L 	(00".. ( > >!M	O
 	(.."55 ( ; ;!M	O
 	(//"-- ( ; ;!N	P 	(//"-- ( > >!Q	S
 	(.."00 ( > >!U	W 	(.."00 ( ; ;!R	TI(MT	qC/Jr   r#   )r;   binwalk.core.commonr   binwalk.core.compatbinwalk.core.moduler   r   r   objectr   r    r#   r   r   r   <module>r|      s:       5 5    6  \V \r   