
    9c                         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	Zd dl
 d dlmZmZmZmZ  G d de      Zy)    N)*)ModuleOptionKwarg	show_helpc                      e Zd Zd ZdZg Z eddeddid       eddeddid       ed	d
ed	did       eddeddid       eddeddid       eddej                  ddid       eddddid       eddddid        ed!d"d!did#       ed$d%d$did&       ed'd(d)did*+       ed,d-e
d.d/id01       ed2d3e
d4d/id51       ed6d7ed8did91       eddej                  j                  j                  d:g i;       ed<dd=ej                  j                  j                  i>      gZ edd?       edd?       ed	d?       edd?       ed8d?       edd?       edd?       edd@?       edd@?       ed!d@?       ed$d@?       ed:g ?       ed)d@?       edAd@?       ed=ej&                  ?       ed.d?       ed4d?      gZd@ZdB ZdC ZdD ZdE ZdHdFZdG Zy)IGeneralr   lengthlzNumber of bytes to scan)longshorttypekwargsdescriptionoffsetozStart scan at this file offsetbaseOz)Add a base address to all printed offsetsblockKzSet file block sizeswapg	swap_sizez%Reverse every n bytes before scanninglogflog_fileNzLog results to filecsvcTz!Log results to file in CSV format)r   r   r   r   termtformat_to_terminalz(Format output to fit the terminal windowquietqzSuppress output to stdoutverbosevzEnable verbose outputhhelpr   zShow help output)r   r   r   r   afincludefile_name_include_regex z,Only scan files whose names match this regex)r   r   r   r   r   pfexcludefile_name_exclude_regexz.Do not scan files whose names match this regexsstatusstatus_server_portz.Enable the status server on the specified portfiles)r   r   r   r   stringsubclass)r   hiddenr   )namedefaultF
keep_goingc                     d| _         g | _        | j                  t        j                  k(  rMt
        j                  j                  j                  r)t
        j                  j                  j                  | _        | j                          | j                          | j                  r$t        j                  | j                        | _        | j                  r$t        j                  | j                        | _        t
        j                  j                   j#                         | _        t
        j                  j$                  j'                  | j(                  | j*                  | j,                  | j.                  | j0                        | _        | j2                  rCt3                t
        j                  j                  j                  st5        j6                  d       | j8                  dkD  r&| j:                  j=                  | j8                         y y )NF)r   r   r"   r$   fit_to_screenr   )threads_activetarget_filesr4   ioFileIObinwalkcoreidbLOADED_IN_IDA	IDBFileIO_open_target_files_set_verbosityr*   recompiler.   settingsSettingsdisplayDisplayr   r   r"   r$   r!   r   sysexitr1   parentstatus_serverselfs    9/usr/lib/python3/dist-packages/binwalk/modules/general.pyloadzGeneral.load{   s`   # ==BII%',,*:*:*H*H#LL,,66DM 	! ''+-::d6R6R+SD(''+-::d6R6R+SD(--668||++338<:>**<@LLBFBYBY	 4 [ >>K<<##11""Q&KK%%d&=&=> '    c                      y )N rP   s    rR   resetzGeneral.reset   s    rT   c                 ^    t        | j                        dkD  r| j                  sd| _        yyy)z
        Sets the appropriate verbosity.
        Must be called after self._test_target_files so that self.target_files is properly set.
           TN)lenr<   r$   rP   s    rR   rE   zGeneral._set_verbosity   s,     t  !A%dllDL /;%rT   c                     | j                   r&| j                   j                  |j                        sy| j                  r&| j                  j                  |j                        ryy)a1  
        Checks to see if a file should be scanned based on file name include/exclude filters.
        Most useful for matryoshka scans where only certian files are desired.

        @fp - An instances of binwalk.common.BlockFile

        Returns True if the file should be scanned, False if not.
        FT)r*   searchr6   r.   )rQ   fps     rR   file_name_filterzGeneral.file_name_filter   sS     ''0L0L0S0STVT[T[0\''D,H,H,O,OPRPWPW,XrT   c           	          || j                   }|| j                  }|| j                  }t        j                  j
                  j                  || j                  |||||      S )zU
        Opens the specified file with all pertinent configuration settings.
        )r4   r
   r   r   r   peek)r
   r   r   r?   r@   common	BlockFiler4   )rQ   fnamer
   r   r   r   r`   s          rR   	open_filezGeneral.open_file   sh     >[[F>[[F<>>D||"",,U6:mm4:4:263826 - 8 	8rT   c                    | j                   D ]|  }| j                  t        j                  k(  r t        j
                  j                  |      r@	 | j                  |      }|j                          | j                  j                  |       ~ y# t        $ r}|d}~wt        $ r@}| j                  d|dt	        j                         dt        |             Y d}~d}~ww xY w)z
        Checks if the target files can be opened.
        Any files that cannot be opened are removed from the self.target_files list.
        NzCannot open file z (CWD: z) : )r   )r2   r4   r=   r>   ospathisdirrd   closer<   appendKeyboardInterrupt	Exceptionerrorgetcwdstr)rQ   tfiler]   es       rR   rD   zGeneral._open_target_files   s     ZZ 	pE==BII-RWW]]55Ip.BHHJ%%,,U3	p ) G  pJJSXZ\ZcZcZegjklgm+nJoops$   <B	C$BC$$6CC$)NNNNN)__name__
__module____qualname__TITLEORDERDEFAULT_DEPENDSr   intargparseFileTypero   r?   r@   ra   rb   
StringFileCLIr   r=   r>   KWARGSPRIMARYrS   rW   rE   r^   rd   rD   rV   rT   rR   r	   r	      s   EEO 	Hm4		6
 	Hm;		=
 	FqkF		H
 	Gl0		2
 	F"A&B		D
 	E%%!4(0		2
 	Edm>	@ 	F+T2E	G 	Go6	8 	I $'2	4 	S"D)-	/ 	S0"5I		K
 	S0"5K		M
 	S+Q/K		M
 	DLL''11m	% 	H!7<<#6#6#A#AB	DQKC\ 	8Q'8Q'61%7A&'3;*:t,5%('77E*9e,7B';.</:ryy1,d;,d;#F( G?B	  8&prT   r	   )r=   rf   rF   rL   ry   binwalk.core.idbr?   binwalk.core.commonbinwalk.core.displaybinwalk.core.settingsbinwalk.core.compatbinwalk.core.moduler   r   r   r   r	   rV   rT   rR   <module>r      s;    
 	 	 
      ! @ @Mpf MprT   