a
    Xg                     @  s   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 deZ	G dd dej
ZG d	d
 d
ej
ZG dd dej
ZG d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                   @  s   e Zd ZdS )
ELFInvalidN)__name__
__module____qualname__ r   r   `/var/www/html/cobodadashboardai.evdpl.com/venv/lib/python3.9/site-packages/packaging/_elffile.pyr      s   r   c                   @  s   e Zd ZdZdZdS )EIClass      N)r   r   r   ZC32ZC64r   r   r   r	   r
      s   r
   c                   @  s   e Zd ZdZdZdS )EIDatar   r   N)r   r   r   ZLsbZMsbr   r   r   r	   r      s   r   c                   @  s    e Zd ZdZdZdZdZdZdS )EMachine      (   >      N)r   r   r   ZI386ZS390ZArmZX8664ZAArc64r   r   r   r	   r   !   s
   r   c                   @  sB   e Zd ZdZdddddZddd	d
dZeddddZdS )ELFFilez.
    Representation of an ELF executable.
    z	IO[bytes]None)freturnc              
   C  sN  || _ z| d}W n0 tjyD } ztd|W Y d }~n
d }~0 0 t|d d }|dkrltd||d | _|d | _z(ddd	d
d| j| jf \}| _| _	W n@ t
y } z(td| j d| j d|W Y d }~n
d }~0 0 z,| |\
}| _}}| _}| _}| _| _W n2 tjyH } ztd|W Y d }~n
d }~0 0 d S )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emagice_fmt_r   r   r	   __init__.   sT     



zELFFile.__init__strztuple[int, ...])fmtr   c                 C  s   t || jt |S )N)r    unpackr   readcalcsize)r-   r5   r   r   r	   r   \   s    zELFFile._readz
str | None)r   c              	   C  s   t | jD ]}| j| j| j|   z| | j}W n tj	yN   Y q
Y n0 || j
d  dkrdq
| j|| j
d   t| j|| j
d  d  S dS )zH
        The path recorded in the ``PT_INTERP`` section header.
        r   r   r   r    N)ranger,   r   seekr)   r+   r   r%   r    r!   r&   osfsdecoder7   strip)r-   indexdatar   r   r	   interpreter_   s    
&zELFFile.interpreterN)r   r   r   __doc__r3   r   propertyrA   r   r   r   r	   r   )   s
   .r   )rB   
__future__r   enumr<   r    typingr   
ValueErrorr   IntEnumr
   r   r   r   r   r   r   r	   <module>   s   
