a „oe ã@sˆdZddlZddlZddlZddlmZmZmZGdd„deƒZ Gdd„dej ƒZ Gdd „d ej ƒZ Gd d „d ej ƒZ Gd d „d ƒZdS)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@s eZdZdS)Ú ELFInvalidN)Ú__name__Ú __module__Ú __qualname__©r r úIC:\Program Files\Certbot\pkgs\pkg_resources\_vendor\packaging\_elffile.pyrsrc@seZdZdZdZdS)ÚEIClassééN)rrrZC32ZC64r r r r r sr c@seZdZdZdZdS)ÚEIDatar r N)rrrZLsbZMsbr r r r rsrc@s eZdZdZdZdZdZdZdS)ÚEMachineééé(é>é·N)rrrZI386ZS390ZArmZX8664ZAArc64r r r r rs rc@sReZdZdZeeddœdd„Zeee dfdœdd „Z e e ed œd d „ƒZ dS) ÚELFFilez. Representation of an ELF executable. N)ÚfÚreturnc Cs&||_z| d¡}Wntjy0tdƒ‚Yn0t|dd…ƒ}|dkrXtd|›�ƒ‚|d|_|d|_z(ddd d d œ|j|jf\}|_|_ Wn,t yÀtd |j›d |j›d�ƒ‚Yn0z,| |¡\ }|_ }}|_ }|_ }|_|_Wn2tj�y }ztdƒ|‚WYd}~n d}~00dS)NZ16Bzunable to parse identificationésELFzinvalid 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Ú_readÚstructÚerrorrÚbytesZcapacityÚencodingÚ_p_fmtÚ_p_idxÚKeyErrorÚmachineÚ_e_phoffÚflagsÚ _e_phentsizeÚ_e_phnum)ÚselfrÚidentÚmagicZe_fmtÚ_Úer r r Ú__init__,sP  ü û  ÿÿ  õö zELFFile.__init__.)ÚfmtrcCst ||j t |¡¡¡S)N)rÚunpackrÚreadÚcalcsize)r+r1r r r rZsz ELFFile._read)rc Cs¤t|jƒD]”}|j |j|j|¡z| |j¡}Wntj yNYq Yn0||j ddkrdq |j ||j d¡t   |j  ||j d¡¡ d¡SdS)zH The path recorded in the ``PT_INTERP`` section header. rrr r úN)Úranger*rÚseekr'r)rr#rr r$ÚosÚfsdecoder3Ústrip)r+ÚindexÚdatar r r Ú interpreter]s &zELFFile.interpreter)rrrÚ__doc__rr!r0ÚstrrÚintrÚpropertyrr=r r r r r's .r)r>Úenumr8rÚtypingrrrÚ ValueErrorrÚIntEnumr rrrr r r r Ús