
    "h                        d Z ddlmZ ddlZddlZddlZddlmZ  G d de      Z	 G d dej                        Z G d	 d
ej                        Z G d dej                        Z G d d      Zy)a;  
ELF file parser.

This provides a class ``ELFFile`` that parses an ELF executable in a similar
interface to ``ZipFile``. Only the read interface is implemented.

Based on: https://gist.github.com/lyssdod/f51579ae8d93c8657a5564aefc2ffbca
ELF header: https://refspecs.linuxfoundation.org/elf/gabi4+/ch4.eheader.html
    )annotationsN)IOc                      e Zd Zy)
ELFInvalidN)__name__
__module____qualname__     T/var/www/html/Resume-Scraper/venv/lib/python3.12/site-packages/packaging/_elffile.pyr   r      s    r   r   c                      e Zd ZdZdZy)EIClass      N)r   r   r	   C32C64r
   r   r   r   r          
C
Cr   r   c                      e Zd ZdZdZy)EIDatar   r   N)r   r   r	   LsbMsbr
   r   r   r   r      r   r   r   c                       e Zd ZdZdZdZdZdZy)EMachine      (   >      N)r   r   r	   I386S390ArmX8664AArc64r
   r   r   r   r   !   s    DD
CEFr   r   c                  2    e Zd ZdZddZddZedd       Zy)	ELFFilez.
    Representation of an ELF executable.
    c           
     v   || _         	 | j                  d      }t        |d d       }|dk7  rt	        d|      |d   | _        |d   | _        	 ddd	d
d| j                  | j                  f   \  }| _        | _	        	 | j                  |      \
  }| _        }}| _        }| _        }| _        | _        y # t        j                  $ r}t	        d      |d }~ww xY w# t        $ r,}t	        d| j                   d| j                   d      |d }~ww xY w# t        j                  $ r}t	        d      |d }~ww xY w)N16Bzunable to parse identification   s   ELFzinvalid magic:    )z<HHIIIIIHHHz	<IIIIIIIIr   r   r(   )z>HHIIIIIHHHz	>IIIIIIIIr*   )z<HHIQQQIHHHz	<IIQQQQQQr   r   r)   )z>HHIQQQIHHHz	>IIQQQQQQr+   ))r   r   )r   r   )r   r   )r   r   zunrecognized capacity (z) or encoding ()z/unable to parse machine and section information)_f_readstructerrorr   bytescapacityencoding_p_fmt_p_idxKeyErrormachine_e_phoffflags_e_phentsize_e_phnum)selffidentemagice_fmt_s          r   __init__zELFFile.__init__.   sg   	FJJu%E eBQi Jui899aa	
 @???	/
 }}dmm,/.+E4;	W 

5!
!G || 	F=>AE	F&  	)$--VWX	$ || 	WNOUVV	WsG   B5 .C ?5D 5CCC	D%'DDD8'D33D8c                    t        j                  || j                  j                  t        j                  |                  S )N)r/   unpackr-   readcalcsize)r<   fmts     r   r.   zELFFile._read[   s)    }}S$'',,vs/C"DEEr   c                *   t        | j                        D ]  }| j                  j                  | j                  | j
                  |z  z          	 | j                  | j                        }|| j                  d      dk7  rj| j                  j                  || j                  d             t        j                  | j                  j                  || j                  d                  j                  d      c S  y# t        j                  $ r Y w xY w)zH
        The path recorded in the ``PT_INTERP`` section header.
        r   r   r   r    N)ranger;   r-   seekr8   r:   r.   r4   r/   r0   r5   osfsdecoderF   strip)r<   indexdatas      r   interpreterzELFFile.interpreter^   s    
 4==) 		OEGGLL):):U)BBCzz$++. DKKN#q(GGLLdkk!n-.;;tww||DQ,@ABHHNN		O  << s   C<<DDN)r=   z	IO[bytes]returnNone)rH   strrS   ztuple[int, ...])rS   z
str | None)r   r   r	   __doc__rC   r.   propertyrR   r
   r   r   r%   r%   )   s(    +WZF  r   r%   )rV   
__future__r   enumrM   r/   typingr   
ValueErrorr   IntEnumr   r   r   r%   r
   r   r   <module>r]      sc    #  	  	 	dll 
T\\ 
t|| D Dr   