
    Xf                         d Z ddlmZ ddlmZmZmZ ddlmZ ddl	m
Z
 ddlmZ ddlmZ  G d d	e
j                        Zy
)zeA module containing a collection of plugins that produce data typically
found in Mac's lsmod command.    )Set)	renderers
interfaces
exceptions)requirements)plugins)utility)format_hintsc                   v    e Zd ZdZdZdZed        Zedej                  j                  defd       Zd Zd Zy	)
LsmodzLists loaded kernel modules.)   r   r   c                 8    t        j                  ddddg      gS )NkernelzKernel module for the OSIntel32Intel64)namedescriptionarchitectures)r   ModuleRequirement)clss    Y/home/panchajanya/Development/work/volatility3/volatility3/framework/plugins/mac/lsmod.pyget_requirementszLsmod.get_requirements   s*     **6()4
 	
    contextdarwin_module_namec              #     K   |j                   |   }|j                  |j                     }|j                  d      }	 |j	                         j                  d      }| 	 |j                  }t               }|dk7  r||vrt        |      dk  r|j	                         }|j                  |j                  j                  |j                  j                        s	 y|j                  |       | 	 |j                  }|dk7  r||vrt        |      dk  ry# t        j                  $ r Y yw xY w# t        j                  $ r Y yw xY w# t        j                  $ r Y yw xY ww)a}  Lists all the modules in the primary layer.

        Args:
            context: The context to retrieve required elements (layers, symbol tables) from
            layer_name: The name of the layer on which to operate
            darwin_symbols: The name of the table containing the kernel symbols

        Returns:
            A list of modules from the `layer_name` layer
        kmod)symbol_name	kmod_infoNr   i   )moduleslayers
layer_nameobject_from_symboldereferencecastr   InvalidAddressExceptionnextsetlenis_validvoloffsetsizeadd)	r   r   r   r   kernel_layerkmod_ptrr   seenkmod_objs	            r   list_moduleszLsmod.list_modules    sX     !34~~f&7&78,,,@	'')..{;D 
	99D EaiD,TT1A'')H(()<)<hll>O>OP 	 HHTNJyy aiD,TT1A 	5 11 		 11 		" 55 sw   ;E!D E!"D/ .BE!1E =E!E!D,)E!+D,,E!/EE!EE!EE!EE!c              #     K   | j                  | j                  | j                  d         D ]]  }t        j                  |j
                        }|j                  }dt        j                  |j                  j                        ||ff _ y w)Nr   r   )r3   r   configr	   array_to_stringr   r-   r
   Hexr+   r,   )selfmodulemod_namemod_sizes       r   
_generatorzLsmod._generatorQ   su     ''dkk(6KL 	OF..v{{;H{{Hl&&vzz'8'898XNNN		Os   BBc                     t        j                  dt        j                  fdt        fdt
        fg| j                               S )NOffsetNameSize)r   TreeGridr
   r7   strintr<   )r8   s    r   runz	Lsmod.runX   s<    !!(()FC=63-HOO
 	
r   N)__name__
__module____qualname____doc___required_framework_version_versionclassmethodr   r   r   ContextInterfacerB   r3   r<   rD    r   r   r   r      s^    &"+H
 
 . ((99.OR. .`O
r   r   N)rH   typingr   volatility3.frameworkr   r   r   #volatility3.framework.configurationr    volatility3.framework.interfacesr   volatility3.framework.objectsr	   volatility3.framework.renderersr
   PluginInterfacer   rM   r   r   <module>rU      s3   !  C C < 4 1 8M
G## M
r   