
    жvg                        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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
    )annotationsN)IOc                      e Zd ZdS )
ELFInvalidN)__name__
__module____qualname__     [/var/www/pixelcanvas.ch/venv/lib/python3.11/site-packages/pip/_vendor/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                  :    e Zd ZdZddZdd
Zedd            ZdS )ELFFilez.
    Representation of an ELF executable.
    f	IO[bytes]returnNonec           
        || _         	 |                     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strtuple[int, ...]c                    t          j        || j                            t          j        |                              S )N)r3   unpackr1   readcalcsize)r@   rG   s     r   r2   zELFFile._read\   s,    }S$',,vs/C/C"D"DEEEr   
str | Nonec                   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?   r1   seekr<   r>   r2   r8   r3   r4   r9   osfsdecoderL   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/N)r&   r'   r(   r)   )rG   rH   r(   rI   )r(   rN   )r   r   r	   __doc__rF   r2   propertyrX   r
   r   r   r%   r%   )   so         ,W ,W ,W ,W\F F F F    X  r   r%   )rY   
__future__r   enumrS   r3   typingr   
ValueErrorr   IntEnumr   r   r   r%   r
   r   r   <module>r`      s:    # " " " " "  				       	 	 	 	 	 	 	 	    dl   
    T\   
    t|   E E E E E E E E E Er   