
    #f                         d Z ddlZddlmZ ddlmZmZ ddlmZ ddlm	Z	 ddl
mZ ddlmZ  ej        e          Z G d	 d
ej                  ZdS )zkA module containing a collection of plugins that produce data typically
found in Linux's /proc file system.    N)List)
exceptions
interfaces)	renderers)requirements)plugins)format_hintsc                   p    e Zd ZdZdZedeej        j	                 fd            Z
d Zd Zd Zd Zd	 Zd
S )Check_afinfoz>Verifies the operation function pointers of network protocols.)   r   r   returnc                 6    t          j        ddg d          gS )NkernelzLinux kernel)Intel32Intel64AArch64)namedescriptionarchitectures)r   ModuleRequirement)clss    b/home/panchajanya/Development/work/volatility3/volatility3/framework/plugins/linux/check_afinfo.pyget_requirementszCheck_afinfo.get_requirements   s2     **???  
 	
    c                     t          | j        j                            |                    }t	          |          dk    S )Nr   )listcontextsymbol_spaceget_symbols_by_locationlen)selfhandler_addrsymbolss      r   _is_known_addresszCheck_afinfo._is_known_address"   s3    t|0HHVVWW7||ar   c              #      K   |D ]h}|                     d          r|dk    r|                    d          }nt          ||          }|r!|dk    r|                     |          s||fV  id S )N__UNIQUE_ID_rh_kabi_hidewrite)attrr   )
startswithmembergetattrr$   )r!   var_opsvar_namememberscheckaddrs         r   _check_memberszCheck_afinfo._check_members'   s       	" 	"E :;; ~~7~33w.. "		$*@*@*F*F	Tk!!!	" 	"r   c           
   #     K   g d}t          fd|D                       }|sbt                              | dt          j        j                   dd                    d |D                                   t          j        	                    d          r)| 
                    j        ||          D ]\  }}|||fV  	                    d          r+| 
                    j        ||          D ]\  }}|||fV  d S 	                    d	          r(|                     j                  s|d
j        fV  d S d S d S )N)seq_fopsseq_opsseq_showc                 :    g | ]}                     |          S  )
has_member).0r*   vars     r   
<listcomp>z.Check_afinfo._check_afinfo.<locals>.<listcomp>9   s%    CCCS^^F##CCCr   z object at z# had none of the required members: z, c                     g | ]}|S r7   r7   )r9   r*   s     r   r;   z.Check_afinfo._check_afinfo.<locals>.<listcomp>=   s2      kR  kR  kRv|kq  kR  kR  kRr   r3   r4   r5   show)anyvollogdebughexvoloffsetjoinr   PluginRequirementExceptionr8   r1   r3   r4   r$   r5   )	r!   r-   r:   
op_membersseq_membersrequired_membershas_required_memberhooked_memberhook_addresss	     `      r   _check_afinfozCheck_afinfo._check_afinfo5   s     >>>!CCCC2BCCC
 
 # 	8LL  U  UCGN(;(;  U  U`d`i`i  kR  kR  AQ  kR  kR  kR  aS  aS  U  U   77>>*%% 	</3/B/Bh
0 0 < <+| |;;;;; >>)$$ 
	9/3/B/BX{0 0 < <+| |;;;;;< < ~~j)) 9--cl;; 9"FCL8888889 99 9r   c           	   #     K   | j         j        | j        d                  }|                    d          j        }|                    d          j        }dddgf}dg df}||g}t                      }t                      }|D ]\  }	}
|
D ]}	 |                    |          }n# t          j        $ r Y *w xY w|	                    |	|j
        	          }|                    |           	 |                     ||||          D ]!\  }}}d
||t          j        |          ffV  "# t          j        $ r |                    |           Y w xY w||k    rt                               d           d S d S )Nr   file_operationsseq_operationstcp_seq_afinfotcp6_seq_afinfotcp4_seq_afinfoudp_seq_afinfo)udplite6_seq_afinfoudp6_seq_afinfoudplite4_seq_afinfoudp4_seq_afinfo)object_typerC   r   zThis plugin was not able to check for hooks. This means you are either analyzing an unsupported kernel version or that your symbol table is corrupt.)r   modulesconfigget_typer.   set
get_symbolr   SymbolErrorobjectaddressaddrL   r	   HexrE   r?   warning)r!   vmlinuxrF   rG   tcpudp	protocolssymbols_checkedsymbols_with_errorsstruct_typeglobal_varsglobal_var_name
global_varr   r*   r`   s                   r   
_generatorzCheck_afinfo._generatorT   s     ,&t{8'<=%%&788@
&&'788@"35F!GH  
 #J	 %%!ee )2 	= 	=$K#. = =!(!3!3O!D!DJJ!-   H %^^ +J4F ,  
  ##O444=151C1C'Z2 2 K K-fg  $0@0I0I!JJJJJJK "< = = ='++O<<<<<=#=* 111NN g     21s$   B""B43B4):D$$$E
Ec                     t          j        dt          fdt          fdt          j        fg|                                           S )NzSymbol NameMemberzHandler Address)r   TreeGridstrr	   rb   rn   )r!   s    r   runzCheck_afinfo.run   sE    !$3"L$45
 OO
 
 	
r   N)__name__
__module____qualname____doc___required_framework_versionclassmethodr   r   configurationRequirementInterfacer   r$   r1   rL   rn   rs   r7   r   r   r   r      s        HH"+
j&>&S!T 
 
 
 [
     
" " "9 9 9>1 1 1f
 
 
 
 
r   r   )rw   loggingtypingr   volatility3.frameworkr   r   r   #volatility3.framework.configurationr    volatility3.framework.interfacesr   volatility3.framework.renderersr	   	getLoggerrt   r?   PluginInterfacer   r7   r   r   <module>r      s   ' '        8 8 8 8 8 8 8 8 + + + + + + < < < < < < 4 4 4 4 4 4 8 8 8 8 8 8		8	$	$}
 }
 }
 }
 }
7* }
 }
 }
 }
 }
r   