o knh @sdZddlmZddlZddlZddlZddlmZGdddeZ Gdddej Z Gd d d ej Z Gd d d ej Z Gd ddZdS)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 eZdZdS) ELFInvalidN)__name__ __module__ __qualname__rr=/usr/local/lib/python3.10/dist-packages/packaging/_elffile.pyrsrc@eZdZdZdZdS)EIClassN)rrrC32C64rrrr r r c@r )EIDatar r N)rrrLsbMsbrrrr rrrc@s eZdZdZdZdZdZdZdS)EMachine(>N)rrrI386S390ArmX8664AArc64rrrr r!s rc@s2eZdZdZdddZdd d ZedddZdS)ELFFilez. Representation of an ELF executable. f IO[bytes]returnNonec Cs&||_z|d}Wntjy}ztd|d}~wwt|dd}|dkr0td||d|_|d|_zddd d d |j|jf\}|_|_ Wnt yh}ztd |jd |jd|d}~wwz||\ }|_ }}|_ }|_ }|_|_WdStjy}ztd|d}~ww)N16Bzunable to parse identificationsELFzinvalid magic: )z HHIIIIIHHHz >IIIIIIIIr')z HHIQQQIHHHz >IIQQQQQQr())r r )r r )r r )r r zunrecognized capacity (z) or encoding ()z/unable to parse machine and section information)_f_readstructerrorrbytescapacityencoding_p_fmt_p_idxKeyErrormachine_e_phoffflags _e_phentsize_e_phnum)selfr identemagice_fmt_rrr __init__.sZ       zELFFile.__init__fmtstrtuple[int, ...]cCst||jt|S)N)r,unpackr*readcalcsize)r9r@rrr r+[sz ELFFile._read str | Nonec Cst|jD]H}|j|j|j|z||j}Wn tj y%Yqw||j ddkr0q|j||j dt |j ||j ddSdS)zH The path recorded in the ``PT_INTERP`` section header. rrr r N)ranger8r*seekr5r7r+r1r,r-r2osfsdecoderDstrip)r9indexdatarrr interpreter^s&zELFFile.interpreterN)r r!r"r#)r@rAr"rB)r"rF)rrr__doc__r?r+propertyrOrrrr r)s   -r)rP __future__renumrJr,typingr ValueErrorrIntEnumr rrrrrrr s