R" f dZddlZddlZddlZddlmZmZmZGddeZ GddejZ Gdd ejZ Gd d ejZ Gd d Zy)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)IOOptionalTuplec eZdZy) ELFInvalidN)__name__ __module__ __qualname__4/usr/lib/python3/dist-packages/packaging/_elffile.pyrrsr rceZdZdZdZy)EIClassN)rr r C32C64r r r rr C Cr rceZdZdZdZy)EIDatarrN)rr r LsbMsbr r r rrrr rc eZdZdZdZdZdZdZy)EMachine(>N)rr r I386S390ArmX8664AArc64r r r rrs D D C E Fr rc\eZdZdZdeeddfdZdedee dffdZ e de efd Z y) ELFFilez. Representation of an ELF executable. freturnNc b||_ |jd}t |dd}|dk7rt d||d|_|d|_ ddd d d |j |jf\}|_|_ |j|\ }|_ }}|_ }|_ }|_|_y#tj$r t dwxYw#t$r't d |j d |jdwxYw#tj$r}t d|d}~wwxYw)N16Bzunable to parse identificationsELFzinvalid magic: )z HHIIIIIHHHz >IIIIIIIIr-)z HHIQQQIHHHz >IIQQQQQQr.))rr)rr)rr)rrzunrecognized 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'identmagice_fmt_es r __init__zELFFile.__init__,sb ?JJu%EeBQi  J ui89 9a a   @??? / }}dmm, /. +E4;  W 5!    ! I|| ?=> > ?& )$--9!]]O1.  &|| WNOUV V Ws/B5.C?5D 5C0D D. D))D.fmt.ctj||jjtj|S)N)r2unpackr0readcalcsize)r?rFs r r1z ELFFile._readZs)}}S$'',,vs/C"DEEr c*t|jD]}|jj|j|j |zz |j |j}||jddk7rj|jj||jdtj|jj||jdjdcSy#tj$rYwxYw)zH The path recorded in the ``PT_INTERP`` section header. rrrrN)ranger>r0seekr;r=r1r7r2r3r8osfsdecoderIstrip)r?indexdatas r interpreterzELFFile.interpreter]s 4==) OE GGLL):):U)BB C zz$++.DKKN#q( GGLLdkk!n- .;;tww||DQ,@ABHHN N O <<  sC<<DD)rr r __doc__rr4rEstrrintr1propertyrrTr r r r&r&'s_,W"U),W,W\FFsCxFXc]r r&)rUenumrOr2typingrrr ValueErrorrIntEnumrrrr&r r r r]sc &&   dll  T\\ t||EEr