
    Dg                         d Z ddlZddlZddlZddlmZmZ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dS )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
    N)IOOptionalTuplec                       e Zd ZdS )
ELFInvalidN)__name__
__module____qualname__     G/var/www/sysmax/venv/lib/python3.11/site-packages/packaging/_elffile.pyr   r      s        Dr   r   c                       e Zd ZdZdZdS )EIClass      N)r   r	   r
   C32C64r   r   r   r   r              
C
CCCr   r   c                       e Zd ZdZdZdS )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dS )EMachine      (   >      N)r   r	   r
   I386S390ArmX8664AArc64r   r   r   r   r      s'        DD
CEFFFr   r   c                   v    e Zd ZdZdee         ddfdZdedee	df         fdZ
edee         fd	            ZdS )
ELFFilez.
    Representation of an ELF executable.
    freturnNc           
         || _         	 |                     d          }n"# t          j        $ r t	          d          w xY wt          |d d                   }|dk    rt	          d|          |d         | _        |d         | _        	 ddd	d
d| j        | j        f         \  }| _        | _	        n.# t          $ r! t	          d| j         d| j         d          w xY w	 |                     |          \
  }| _        }}| _        }| _        }| _        | _        d S # 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)selfr'   identmagice_fmt_es          r   __init__zELFFile.__init__,   s   	?JJu%%EE| 	? 	? 	?=>>>	?eBQBi  J8u88999aa	
 @???	/ /
 }dm,/.+E4;  	 	 	.$- . .!]. . .  		W 

5!!
!| 	W 	W 	WNOOUVV	Ws,    >'B3 3+C"9D E,D<<Efmt.c                     t          j        || j                            t          j        |                              S )N)r2   unpackr0   readcalcsize)r?   rF   s     r   r1   zELFFile._readZ   s,    }S$',,vs/C/C"D"DEEEr   c                    t          | j                  D ]}| j                            | j        | j        |z  z              	 |                     | j                  }n# t          j	        $ r Y Yw xY w|| j
        d                  dk    ru| j                            || j
        d                             t          j        | j                            || j
        d                                                          d          c S dS )zH
        The path recorded in the ``PT_INTERP`` section header.
        r   r   r   r    N)ranger>   r0   seekr;   r=   r1   r7   r2   r3   r8   osfsdecoderI   strip)r?   indexdatas      r   interpreterzELFFile.interpreter]   s    
 4=)) 		O 		OEGLL):U)BBCCCzz$+..<   DKN#q((GLLdk!n-...;tw||DQ,@AABBHHNNNNNts   AA/.A/)r   r	   r
   __doc__r   r4   rE   strr   intr1   propertyr   rT   r   r   r   r&   r&   '   s         ,W"U) ,W ,W ,W ,W ,W\F FsCx F F F F Xc]    X  r   r&   )rU   enumrO   r2   typingr   r   r   
ValueErrorr   IntEnumr   r   r   r&   r   r   r   <module>r]      s4     				  & & & & & & & & & &	 	 	 	 	 	 	 	    dl   
    T\   
    t|   E E E E E E E E E Er   