
    *1f!                         d dl mZmZmZmZmZmZ d dlmZm	Z	m
Z
mZ d dlmZ d dlmZ  G d dej                  Z G d dej        j                  Zd	S )
    )IteratorAnyIterableListTupleSet)
interfacesobjects
exceptions	constants)intermed)
extensionsc                   (     e Zd ZddiZd fdZ xZS )MacKernelIntermedSymbolstype	interfacereturnNc                     t                      j        |i | |                     dt          j                   |                     dt          j                   |                     dt          j                   |                     dt          j                   |                     dt          j                   |                     dt          j	                   |                     dt          j
                   |                     dt          j                   |                     d	t          j                   |                     d
t          j                   |                     dt          j                   |                     dt          j                   |                     dt          j                   |                     dt          j                   d S )Nprocfileglobvnodevm_map_entryvm_map_objectsocketinpcbifnetsockaddr_dlsockaddr
sysctl_oidkauth_scopequeue_entryqueue_head_t)super__init__set_type_classr   r   r   r   r   r   r   r   r   r   r   r   r    r!   optional_set_type_class)selfargskwargs	__class__s      \/home/panchajanya/Development/work/volatility3/volatility3/framework/symbols/mac/__init__.pyr$   z!MacKernelIntermedSymbols.__init__   s   $)&)))FJO444J
(;<<<GZ%5666NJ,CDDDOZ-EFFFHj&7888GZ%5666GZ%5666M:+ABBBJ
(;<<<L**?@@@M:+ABBBM:+ABBB$$^Z5KLLLLL    )r   N)__name__
__module____qualname__providesr$   __classcell__)r*   s   @r+   r   r      sQ        $HM M M M M M M M M Mr,   r   c                      e Zd ZdZ	 dZdZedej        j	        de
dee         deeej        j        eef                  fd            Zedej        j	        de
d	ee         fd
            Ze	 ddej        j	        dee         de
fd            Zedej        j	        de
dej        j        fd            Ze	 ddej        j        de
de
de
dedeej        j                 fd            Ze	 ddej        j        de
dedeej        j                 fd            Ze	 ddej        j        de
dedeej        j                 fd            Ze	 ddej        j        de
dedeej        j                 fd            ZdS )MacUtilitiesz)Class with multiple useful mac functions.)      r   )   r   r   context
layer_namemodsr   c                 D    |j         |         j        fd|D             S )zZ
        A helper function to mask the starting and end address of kernel modules
        c                     g | ]A}t           j                            |j                  |j        z  |j        z  |j        z   fBS  )r
   utilityarray_to_stringnameaddresssize).0modmasks     r+   
<listcomp>z/MacUtilities.mask_mods_list.<locals>.<listcomp>:   s]     
 
 
 	 //99d"t#sx/
 
 
r,   )layersaddress_mask)clsr7   r8   r9   rD   s       @r+   mask_mods_listzMacUtilities.mask_mods_list.   sA     ~j)6
 
 
 
 
 
 
 	
r,   	mods_listc                    	 |                     d          }n*# t          j        $ r |                     d          }Y nw xY w	 |                     d          }n*# t          j        $ r |                     d          }Y nw xY w|j        |         j        }||z  }||z  }d||fgt
                              |||          z   S )Nvm_kernel_stextstextvm_kernel_etextetext
__kernel__)object_from_symbolr   SymbolErrorrF   rG   r3   rI   )rH   r7   r8   kernelrJ   
start_addrend_addrrD   s           r+   generate_kernel_handler_infoz)MacUtilities.generate_kernel_handler_infoC   s    	<223DEEJJ% 	< 	< 	<227;;JJJ	<	:001BCCHH% 	: 	: 	:0099HHH	: ~j)6$&
d?z8458S8SZ9
 9
 
 	
s    $??A $B ?B Nhandlerskernel_module_namec                    d}d}d}|r|j         |         }|j        }|D ]\  }	}
}|
|cxk    r|k    rn |	}|	dk    rt          |j                            ||z
                      }t          |          dk    rat          j        |d         v r8t          |d         	                    t          j                  d                   nt          |d                   } n||fS )NUNKNOWNzN/Ar   rP   r4   )
modulesoffsetlistsymbol_spaceget_symbols_by_locationlenr   BANGstrsplit)rH   r7   rW   target_addressrX   mod_namesymbol_namemodule_shiftmoduler?   startendsymbolss                r+   lookup_module_addressz"MacUtilities.lookup_module_address^   s     	)_%78F!=L ( 	 	D%----#-----<''",DD*\9  G 7||a''  )~;;  
 0 0 @ @ CDDD!$WQZ $ ! .$ $$r,   symbol_table_nametaskc              #     K   	 |j         j        }n# t          j        $ r d}Y nw xY w	 |j         j        }n# t          j        $ r d}Y nw xY w||k    r|}|dk    rd}|t
          j        z   dz   }	 |j         j                                        }n# t          j        $ r Y dS w xY wt          j
                            ||||          }t          |          D ]\  }	}
|
dk    r	 |
j                                        }n# t          j        $ r Y 7w xY w|dk    rF|
j        j                                                            d          }|                                }n|rd	|                                 d
}|
||	fV  dS )ae  Creates a generator for the file descriptors of a process

        Args:
            symbol_table_name: The name of the symbol table associated with the process
            context:
            task: The process structure to enumerate file descriptors from

        Return:
            A 3 element tuple is yielded for each file descriptor:
            1) The file's object
            2) The path referenced by the descriptor.
                The path is either empty, the full path of the file in the file system, or the formatted name for sockets, pipes, etc.
            3) The file descriptor number
        i      fileprocN)countsubtyper7   r   VNODEr   <>)p_fdfd_lastfiler   InvalidAddressException	fd_nfilesr   ra   	fd_ofilesdereferencer
   r=   array_of_pointers	enumeratef_fglobget_fg_typefg_datacast	full_pathlower)rH   r7   rm   rn   num_fdsnfiles	file_type
table_addrfdsfd_numfftyper   paths                 r+   files_descriptors_for_processz*MacUtilities.files_descriptors_for_process   s     ,	i+GG1 	 	 	GGG		Y(FF1 	 	 	FFF	 GGT>>G%	6C		,88::JJ1 	 	 	44	 o//gy' 0 
 
 #3 	& 	&IFAAvvI1133EE!9   H G##I-99;;@@IIE ??,,DD 0/u{{}}///Dvo%%%	& 	&s?    %%6 A
	A
0B B"!B"#C==DDrp   queuelist_head_memberlist_next_membernext_membermax_elementsc              #     K   t                      }	 |                    |          }n# t          j        $ r Y d S w xY w|r|j        j        |v rd S |                    |j        j                   t          |          |k    rd S |                                r|V  	 |                    |                              |          }n# t          j        $ r Y d S w xY w|d S d S )N)attr)	setmemberr   ry   volr\   addr`   is_readable)rH   r   r   r   r   r   seencurrents           r+   _walk_iterablezMacUtilities._walk_iterable   s)      	ll(8l99GG1 	 	 	44	  	{!T))HHW['(((4yyL((""$$ !..k.::AAGWAXX5     	 	 	 	 	s   ) <<*C	 	CCc              #   J   K   |                      |dd||          D ]}|V  d S )N	tqh_firsttqe_nextr   rH   r   r   r   elements        r+   
walk_tailqzMacUtilities.walk_tailq   I       ));
K
 
 	 	G MMMM	 	r,   c              #   J   K   |                      |dd||          D ]}|V  d S )Nlh_firstle_nextr   r   s        r+   walk_list_headzMacUtilities.walk_list_head   sI       )):y+|
 
 	 	G MMMM	 	r,   c              #   J   K   |                      |dd||          D ]}|V  d S )N	slh_firstsle_nextr   r   s        r+   
walk_slistzMacUtilities.walk_slist   r   r,   )N)rp   )r-   r.   r/   __doc___version_required_framework_versionclassmethodr	   r7   ContextInterfacerb   r   r   r   r   r
   ObjectInterfacerI   rV   rl   r   intr   r   r   r   r   r<   r,   r+   r3   r3   "   s
       33 H"+
#4
 
 sm	

 
eJ&6S@A	B
 
 
 [
( 
#4
 

 C=
 
 
 [
4  #'"% "%#4"% 3-"%
  "% "% "% ["%H =&#4=& =&  0	=& =& =& [=&~  ! !1  	
   
*$4	5   [@ 
 !		 	!1	 	 		
 
*$4	5	 	 	 [	 
 !		 	!1	 	 		
 
*$4	5	 	 	 [	 
 !		 	!1	 	 		
 
*$4	5	 	 	 [	 	 	r,   r3   N)typingr   r   r   r   r   r   volatility3.frameworkr	   r
   r   r   volatility3.framework.symbolsr   !volatility3.framework.symbols.macr   IntermediateSymbolTabler   configurationVersionableInterfacer3   r<   r,   r+   <module>r      s    = < < < < < < < < < < < < < < < L L L L L L L L L L L L 2 2 2 2 2 2 8 8 8 8 8 8M M M M Mx? M M M.d d d d d:+@ d d d d dr,   