'e_type from the elf header. In practice the value will almost always
be \'EXEC\' or \'DYN\'. If the value is architecture-specific (between
ET_LOPROC and ET_HIPROC) or invalid, KeyError is raised.'

@property
def elftype(self):

    if (not self._elftype):
        Ehdr = {32: elf.Elf32_Ehdr, 64: elf.Elf64_Ehdr}[self.elfclass]
        elftype = self.leak.field(self.libbase, Ehdr.e_type)
        self._elftype = {constants.ET_NONE: 'NONE', constants.ET_REL: 'REL', constants.ET_EXEC: 'EXEC', constants.ET_DYN: 'DYN', constants.ET_CORE: 'CORE'}[elftype]
    return self._elftype
