objutils.elf package#

Subpackages#

Submodules#

objutils.elf.attributes module#

objutils.elf.defs module#

class objutils.elf.defs.AVRMachineType(*values)[source]#

Bases: IntEnum

E_AVR_MACH_AVR1 = 1#
E_AVR_MACH_AVR2 = 2#
E_AVR_MACH_AVR25 = 25#
E_AVR_MACH_AVR3 = 3#
E_AVR_MACH_AVR31 = 31#
E_AVR_MACH_AVR35 = 35#
E_AVR_MACH_AVR4 = 4#
E_AVR_MACH_AVR5 = 5#
E_AVR_MACH_AVR51 = 51#
E_AVR_MACH_AVR6 = 6#
E_AVR_MACH_AVRTINY = 100#
E_AVR_MACH_XMEGA1 = 101#
E_AVR_MACH_XMEGA2 = 102#
E_AVR_MACH_XMEGA3 = 103#
E_AVR_MACH_XMEGA4 = 104#
E_AVR_MACH_XMEGA5 = 105#
E_AVR_MACH_XMEGA6 = 106#
E_AVR_MACH_XMEGA7 = 107#
class objutils.elf.defs.ArmMachineData(machine_code: int, flags: int)[source]#

Bases: MachineData

specific() list[source]#
class objutils.elf.defs.AvrMachineData(machine_code: int, flags: int)[source]#

Bases: MachineData

specific() list[source]#
class objutils.elf.defs.ELFAbiType(*values)[source]#

Bases: IntEnum

ELFOSABI_AIX = 7#
ELFOSABI_ARM = 97#
ELFOSABI_AROS = 15#
ELFOSABI_C6000_ELFABI = 64#
ELFOSABI_C6000_LINUX = 65#
ELFOSABI_FENIXOS = 16#
ELFOSABI_FREEBSD = 9#
ELFOSABI_GNU = 3#
ELFOSABI_HPUX = 1#
ELFOSABI_IRIX = 8#
ELFOSABI_LINUX = 3#
ELFOSABI_MODESTO = 11#
ELFOSABI_NETBSD = 2#
ELFOSABI_NONE = 0#
ELFOSABI_NSK = 14#
ELFOSABI_OPENBSD = 12#
ELFOSABI_OPENVMS = 13#
ELFOSABI_SOLARIS = 6#
ELFOSABI_STANDALONE = 255#
ELFOSABI_TRU64 = 10#
class objutils.elf.defs.ELFClass(*values)[source]#

Bases: IntEnum

ELFCLASS32 = 1#
ELFCLASS64 = 2#
ELFCLASSNONE = 0#
class objutils.elf.defs.ELFDataEncoding(*values)[source]#

Bases: IntEnum

ELFDATA2LSB = 1#
ELFDATA2MSB = 2#
ELFDATANONE = 0#
class objutils.elf.defs.ELFMachineType(*values)[source]#

Bases: IntEnum

EM_386 = 3#
EM_68HC05 = 72#
EM_68HC08 = 71#
EM_68HC11 = 70#
EM_68HC12 = 53#
EM_68HC16 = 69#
EM_68K = 4#
EM_860 = 7#
EM_88K = 5#

RESERVED 6 Reserved for future use

EM_960 = 19#
EM_AARCH64 = 183#
EM_ADAPTEVA_EPIPHANY = 4643#
EM_ALPHA = 41#
EM_ALPHA_NO_ABI = 36902#
EM_ALTERA_NIOS2 = 113#
EM_ARC = 45#
EM_ARCA = 109#
EM_ARC_A5 = 93#
EM_ARM = 40#
EM_AVR = 83#
EM_AVR32 = 185#
EM_AVR_OLD = 4183#
EM_BLACKFIN = 106#
EM_C166 = 116#
EM_CE = 119#
EM_COLDFIRE = 52#
EM_COOLRISC_C816 = 51222#
EM_CR = 103#
EM_CR16 = 177#
EM_CRAYNV2 = 172#
EM_CRIS = 76#
EM_CRX = 114#
EM_CUDA = 190#
EM_CYGNUS_D10V = 30288#
EM_CYGNUS_D30V = 30326#
EM_CYGNUS_FR30 = 13104#
EM_CYGNUS_FRV = 21569#
EM_CYGNUS_M32R = 36929#
EM_CYGNUS_MEP = 61453#
EM_CYGNUS_MN10200 = 57005#
EM_CYGNUS_MN10300 = 48879#
EM_CYGNUS_POWERPC = 36901#
EM_CYGNUS_V850 = 36992#
EM_CYPRESS_M8C = 161#
EM_D10V = 85#
EM_D30V = 86#
EM_DLX = 23205#
EM_DSP24 = 136#
EM_DSPIC30F = 118#
EM_DXP = 112#
EM_ECOG1 = 168#
EM_ECOG16 = 176#
EM_ECOG1X = 168#
EM_ECOG2 = 134#
EM_ETPU = 178#
EM_EXCESS = 111#
EM_F2MC16 = 104#
EM_FIREPATH = 78#
EM_FR20 = 37#
EM_FR30 = 84#
EM_FX66 = 66#
EM_H8S = 48#
EM_H8_300 = 46#
EM_H8_300H = 47#
EM_H8_500 = 49#
EM_HUANY = 81#
EM_I8051 = 165#
EM_IA_64 = 50#
EM_IP2K = 101#
EM_IP2K_OLD = 33303#
EM_IQ2000 = 65210#
EM_JAVELIN = 77#
EM_L1OM = 180#
EM_LATTICEMICO32 = 138#
EM_M16C = 117#
EM_M32 = 1#
EM_M32C = 120#
EM_M32C_OLD = 65200#
EM_M32R = 88#
EM_MANIK = 171#
EM_MAX = 102#
EM_MAXQ30 = 169#
EM_MCST_ELBRUS = 175#
EM_ME16 = 59#
EM_METAG = 174#
EM_MICROBLAZE = 189#
EM_MICROBLAZE_OLD = 47787#
EM_MIPS = 8#
EM_MIPS_RS3_LE = 10#

RESERVED 11-14 Reserved for future use

EM_MIPS_X = 51#
EM_MMA = 54#
EM_MMDSP_PLUS = 160#
EM_MMIX = 80#
EM_MN10200 = 90#
EM_MN10300 = 89#
EM_MOXIE = 65261#
EM_MSP430 = 105#
EM_MSP430_OLD = 4185#
EM_MT = 9520#
EM_NCPU = 56#
EM_NDR1 = 57#
EM_NDS32 = 167#
EM_NEC_V850 = 29246#
EM_NIOS32 = 65211#
EM_NONE = 0#
EM_NS32K = 97#
EM_OPENRISC = 92#
EM_OPENRISC_OLD = 13350#
EM_OR32 = 33906#
EM_PARISC = 15#
EM_PCP = 55#
EM_PDP10 = 64#
EM_PDP11 = 65#
EM_PDSP = 63#
EM_PJ = 91#
EM_PPC = 20#
EM_PPC64 = 21#
EM_PRISM = 82#
EM_QDSP6 = 164#
EM_R32C = 162#
EM_RCE = 39#
EM_RH32 = 38#
EM_RS08 = 132#
EM_RX = 173#
EM_S370 = 9#
EM_S390 = 22#
EM_S390_OLD = 41872#
EM_SCORE = 135#
EM_SCORE7 = 135#
EM_SEP = 108#
EM_SE_C17 = 139#
EM_SE_C33 = 107#
EM_SH = 42#
EM_SLE9X = 179#
EM_SNP1K = 99#
EM_SPARC = 2#
EM_SPARC32PLUS = 18#
EM_SPARCV9 = 43#
EM_SPU = 23#

RESERVED 24-35 Reserved for future use

EM_ST100 = 60#
EM_ST19 = 74#
EM_ST200 = 100#
EM_ST7 = 68#
EM_ST9PLUS = 67#
EM_STARCORE = 58#
EM_STM8 = 186#
EM_STXP7X = 166#
EM_SVX = 73#
EM_TILE64 = 187#
EM_TILEGX = 191#
EM_TILEPRO = 188#
EM_TINYJ = 61#
EM_TI_ARP32 = 143#
EM_TI_C2000 = 141#
EM_TI_C5500 = 142#
EM_TI_C6000 = 140#
EM_TI_PRU = 144#
EM_TMM_GPP = 96#
EM_TPC = 98#
EM_TRICORE = 44#
EM_TRIMEDIA = 163#
EM_TSK3000 = 131#
EM_UNICORE = 110#
EM_V800 = 36#
EM_V850 = 87#
EM_VAX = 75#
EM_VIDEOCORE = 95#
EM_VIDEOCORE3 = 137#
EM_VPP500 = 17#
EM_X86_64 = 62#
EM_XC16X = 18056#
EM_XGATE = 115#
EM_XIMO16 = 170#
EM_XSTORMY16 = 44357#
EM_XTENSA = 94#
EM_XTENSA_OLD = 43975#
EM_ZSP = 79#
RESERVED = 16#
class objutils.elf.defs.ELFType(*values)[source]#

Bases: IntEnum

ET_CORE = 4#

Core file

ET_DYN = 3#

Shared object file

ET_EXEC = 2#

Executable file

ET_HIOS = 65279#

Operating system-specific

ET_HIPROC = 65535#

Processor-specific

ET_LOOS = 65024#

Operating system-specific

ET_LOPROC = 65280#

Processor-specific

ET_NONE = 0#

No file type

ET_NUM = 5#

Number of defined types

ET_REL = 1#

Relocatable file

class objutils.elf.defs.Elf32_Ehdr(e_type, e_machine, e_version, e_entry, e_phoff, e_shoff, e_flags, e_ehsize, e_phentsize, e_phnum, e_shentsize, e_shnum, e_shstrndx)#

Bases: tuple

_asdict()#

Return a new dict which maps field names to their values.

_field_defaults = {}#
_fields = ('e_type', 'e_machine', 'e_version', 'e_entry', 'e_phoff', 'e_shoff', 'e_flags', 'e_ehsize', 'e_phentsize', 'e_phnum', 'e_shentsize', 'e_shnum', 'e_shstrndx')#
classmethod _make(iterable)#

Make a new Elf32_Ehdr object from a sequence or iterable

_replace(**kwds)#

Return a new Elf32_Ehdr object replacing specified fields with new values

e_ehsize#

Alias for field number 7

e_entry#

Alias for field number 3

e_flags#

Alias for field number 6

e_machine#

Alias for field number 1

e_phentsize#

Alias for field number 8

e_phnum#

Alias for field number 9

e_phoff#

Alias for field number 4

e_shentsize#

Alias for field number 10

e_shnum#

Alias for field number 11

e_shoff#

Alias for field number 5

e_shstrndx#

Alias for field number 12

e_type#

Alias for field number 0

e_version#

Alias for field number 2

objutils.elf.defs.Elf32_Sym#

alias of Elf_Sym

objutils.elf.defs.Elf64_Sym#

alias of Elf_Sym

class objutils.elf.defs.Elf_Shdr(sh_name, sh_type, sh_flags, sh_addr, sh_offset, sh_size, sh_link, sh_info, sh_addralign, sh_entsize)#

Bases: tuple

_asdict()#

Return a new dict which maps field names to their values.

_field_defaults = {}#
_fields = ('sh_name', 'sh_type', 'sh_flags', 'sh_addr', 'sh_offset', 'sh_size', 'sh_link', 'sh_info', 'sh_addralign', 'sh_entsize')#
classmethod _make(iterable)#

Make a new Elf_Shdr object from a sequence or iterable

_replace(**kwds)#

Return a new Elf_Shdr object replacing specified fields with new values

sh_addr#

Alias for field number 3

sh_addralign#

Alias for field number 8

sh_entsize#

Alias for field number 9

sh_flags#

Alias for field number 2

sh_info#

Alias for field number 7

Alias for field number 6

sh_name#

Alias for field number 0

sh_offset#

Alias for field number 4

sh_size#

Alias for field number 5

sh_type#

Alias for field number 1

class objutils.elf.defs.MachineData(machine_code: int, flags: int)[source]#

Bases: object

machine_name: str = '<unknown>'#
specific() list[source]#
type_name: str = '???'#
type_value: int = -1#
class objutils.elf.defs.NoteSegmentDescriptorCore(*values)[source]#

Bases: IntEnum

Legal values for note segment descriptor types for core files.

NT_386_IOPERM = 513#
NT_386_TLS = 512#
NT_ASRS = 8#
NT_AUXV = 6#
NT_FPREGSET = 2#
NT_GWINDOWS = 7#
NT_LWPSINFO = 17#
NT_LWPSTATUS = 16#
NT_PLATFORM = 5#
NT_PPC_SPE = 257#
NT_PPC_VMX = 256#
NT_PPC_VSX = 258#
NT_PRCRED = 14#
NT_PRFPXREG = 20#
NT_PRPSINFO = 3#
NT_PRSTATUS = 1#
NT_PRXFPREG = 1189489535#
NT_PRXREG = 4#
NT_PSINFO = 13#
NT_PSTATUS = 10#
NT_TASKSTRUCT = 4#
NT_UTSNAME = 15#
NT_X86_XSTATE = 514#
class objutils.elf.defs.NoteSegmentDescriptorObject(*values)[source]#

Bases: IntEnum

Legal values for the note segment descriptor types for object files.

NT_VERSION = 1#
class objutils.elf.defs.ProgramHeader(*values)[source]#

Bases: IntEnum

PT_ARM_EXIDX = 1879048193#
PT_DYNAMIC = 2#
PT_GNU_EH_FRAME = 1685382480#
PT_GNU_PROPERTY = 1685382483#
PT_GNU_RELRO = 1685382482#
PT_GNU_STACK = 1685382481#
PT_HIOS = 1879048191#
PT_HIPROC = 2147483647#
PT_HISUNW = 1879048191#
PT_INTERP = 3#
PT_LOAD = 1#
PT_LOOS = 1610612736#
PT_LOPROC = 1879048192#
PT_LOSUNW = 1879048186#
PT_NOTE = 4#
PT_NULL = 0#
PT_NUM = 8#
PT_PHDR = 6#
PT_SHLIB = 5#
PT_SUNWBSS = 1879048186#
PT_SUNWSTACK = 1879048187#
PT_TLS = 7#
class objutils.elf.defs.SectionFlags(*values)[source]#

Bases: IntEnum

SHF_ALLOC = 2#
SHF_COMPRESSED = 2048#
SHF_EXCLUDE = 2147483648#
SHF_EXECINSTR = 4#
SHF_GROUP = 512#
SHF_MASKOS = 267386880#
SHF_MASKPROC = 4026531840#
SHF_MERGE = 16#
SHF_ORDERED = 1073741824#
SHF_OS_NONCONFORMING = 256#
SHF_STRINGS = 32#
SHF_TLS = 1024#
SHF_WRITE = 1#
class objutils.elf.defs.SectionName(*values)[source]#

Bases: IntEnum

SHN_ABS = 65521#
SHN_AFTER = 65281#
SHN_BEFORE = 65280#
SHN_COMMON = 65522#
SHN_HIOS = 65343#
SHN_HIPROC = 65311#
SHN_HIRESERVE = 65535#
SHN_IA_64_ANSI_COMMON = 65280#
SHN_LOOS = 65312#
SHN_LOPROC = 65280#
SHN_LORESERVE = 65280#
SHN_UNDEF = 0#
SHN_XINDEX = 65535#
class objutils.elf.defs.SectionType(*values)[source]#

Bases: IntEnum

SHT_ARM_ATTRIBUTES = 1879048195#
SHT_ARM_DEBUGOVERLAY = 1879048196#
SHT_ARM_EXIDX = 1879048193#
SHT_ARM_OVERLAYSECTION = 1879048197#
SHT_ARM_PREEMPTMAP = 1879048194#
SHT_CHECKSUM = 1879048184#
SHT_DYNAMIC = 6#
SHT_DYNSYM = 11#
SHT_FINI_ARRAY = 15#
SHT_GNU_ATTRIBUTES = 1879048181#
SHT_GNU_HASH = 1879048182#
SHT_GNU_INCREMENTAL_INPUTS = 1879000832#
SHT_GNU_LIBLIST = 1879048183#
SHT_GNU_verdef = 1879048189#
SHT_GNU_verneed = 1879048190#
SHT_GNU_versym = 1879048191#
SHT_GROUP = 17#
SHT_HASH = 5#
SHT_HIOS = 1879048191#
SHT_HIPROC = 2147483647#
SHT_HISUNW = 1879048191#
SHT_HIUSER = 4294967295#
SHT_INIT_ARRAY = 14#
SHT_LOOS = 1610612736#
SHT_LOPROC = 1879048192#
SHT_LOSUNW = 1879048186#
SHT_LOUSER = 2147483648#
SHT_NOBITS = 8#
SHT_NOTE = 7#
SHT_NULL = 0#
SHT_NUM = 19#
SHT_PREINIT_ARRAY = 16#
SHT_PROGBITS = 1#
SHT_REL = 9#
SHT_RELA = 4#
SHT_SHLIB = 10#
SHT_STRTAB = 3#
SHT_SUNW_COMDAT = 1879048187#
SHT_SUNW_move = 1879048186#
SHT_SUNW_syminfo = 1879048188#
SHT_SYMTAB = 2#
SHT_SYMTAB_SHNDX = 18#
class objutils.elf.defs.SymbolBinding(*values)[source]#

Bases: IntEnum

STB_GLOBAL = 1#
STB_GNU_UNIQUE = 10#
STB_HIPROC = 15#
STB_LOCAL = 0#
STB_LOPROC = 13#
STB_WEAK = 2#
class objutils.elf.defs.SymbolType(*values)[source]#

Bases: IntEnum

STT_COMMON = 5#
STT_FILE = 4#
STT_FUNC = 2#
STT_GNU_IFUNC = 10#
STT_HIPROC = 15#
STT_LOPROC = 13#
STT_NOTYPE = 0#
STT_OBJECT = 1#
STT_RELC = 8#
STT_SECTION = 3#
STT_SRELC = 9#
STT_TLS = 6#
class objutils.elf.defs.SymbolVisibility(*values)[source]#

Bases: IntEnum

Symbol visibility specification encoded in the st_other field.

STV_DEFAULT = 0#
STV_HIDDEN = 2#
STV_INTERNAL = 1#
STV_PROTECTED = 3#
objutils.elf.defs.program_header_flags_name(flg: int) str[source]#
objutils.elf.defs.program_header_name(tp: int) str[source]#
objutils.elf.defs.special_section_name(ndx)[source]#

objutils.elf.elfcons module#

objutils.elf.relocs module#

objutils.elf.testblocks module#

Module contents#

Parser for ELF files.

class objutils.elf.DBAPI(parent)[source]#

Bases: object

property query#
property session#
class objutils.elf.DebugInfo(section, image)#

Bases: tuple

_asdict()#

Return a new dict which maps field names to their values.

_field_defaults = {}#
_fields = ('section', 'image')#
classmethod _make(iterable)#

Make a new DebugInfo object from a sequence or iterable

_replace(**kwds)#

Return a new DebugInfo object replacing specified fields with new values

image#

Alias for field number 1

section#

Alias for field number 0

class objutils.elf.ElfFileStruct(*args, **kws)[source]#

Bases: Struct

elf32Addr()[source]#
setByteOrder()[source]#
class objutils.elf.ElfParser(filename: str)[source]#

Bases: object

BasicHeader = <Struct>#
DATATYPES32 = {'Addr': (<FormatField>, <FormatField>), 'Half': (<FormatField>, <FormatField>), 'Off': (<FormatField>, <FormatField>), 'Sword': (<FormatField>, <FormatField>), 'Sxword': (None, None), 'Word': (<FormatField>, <FormatField>), 'Xword': (<FormatField>, <FormatField>)}#
DATATYPES64 = {'Addr': (<FormatField>, <FormatField>), 'Half': (<FormatField>, <FormatField>), 'Off': (<FormatField>, <FormatField>), 'Sword': (<FormatField>, <FormatField>), 'Sxword': (<FormatField>, <FormatField>), 'Word': (<FormatField>, <FormatField>), 'Xword': (<FormatField>, <FormatField>)}#
EI_NIDENT = 16#
_parse_comment(data)[source]#
_parse_note(data)[source]#
_parse_program_headers()[source]#
_parse_section_headers()[source]#
_parse_symbol_section(section)[source]#
_parser_extended_header()[source]#
property arm_attributes#
property comment#
create_db_on_demand() None[source]#
create_image(join: bool = True, include_pattern: str = '', exclude_pattern: str = '', callback: Callable | None = None)[source]#
Parameters:
join: bool

Try to join/merge sections.

include_pattern: str

Include only sections matching a Python RegEx

exclude_pattern: str

Exclude sections matching a Python RegEx

callback: callable

Could be used to generate output for your command-line tools.

Called with:
  • state: “start” | “stop” | “section”

  • section – current section (only applicable to state “section”).

Returns:
objutils.Image
create_section_to_segment_mapping()[source]#
debug_sections()[source]#
property e_ehsize#
property e_entry#
property e_flags#
property e_machine#
property e_phentsize#
property e_phnum#
property e_phoff#
property e_shentsize#
property e_shnum#
property e_shoff#
property e_shstrndx#
property e_type#
property e_version#
property ei_abiversion#
property ei_class#
property ei_data#
property ei_osabi#
property ei_version#
property endianess#
get_basic_header_field(name)[source]#
get_extended_header_field(name)[source]#
get_string(table_index, entry)[source]#
property header_bytes#
load_data()[source]#
property machine_data: str#
property notes#
property query#
section_in_segment(section_header, segment)[source]#
section_in_segment1(section_header, segment, check_vma, strict)[source]#
section_in_segment_strict(section_header, segment)[source]#
section_size(section_header, segment)[source]#
property segments#
set_data_types(obj)[source]#
tbss_special(section_header, segment)[source]#
class objutils.elf.ListToBytesAdapter(subcon)[source]#

Bases: Adapter

_decode(obj, context)[source]#
_encode(obj, context)[source]#
class objutils.elf.PrintContext[source]#

Bases: Construct

_parse(stream, context, *args, **kws)[source]#

Override in your subclass.

class objutils.elf.SectionAPI(parent)[source]#

Bases: DBAPI

fetch(sections: str = None, name_pattern: str = None, order_by_address: bool = True)[source]#
Returns:
get(section_name: str)[source]#

Get a single section.

Parameters:
section_name: str
Returns:
class objutils.elf.SymbolAPI(parent)[source]#

Bases: DBAPI

fetch(sections: str = None, name_pattern: str = None, bindings: str = None, access: str = None, types_str: str = None, order_by_value: bool = True)[source]#
Returns:
fetch_gcc_special_symbols()[source]#
Returns:
get(symbol_name: str, section_name: str = None)[source]#

Get a single symbol.

Parameters:
symbol_name: str or list of strings.

Symbol(s) to look for.

section_name: str

Consider only named section, else lookup all sections.

Returns:
objutils.elf.UTCTimeStamp(name)[source]#
class objutils.elf.UTCTimeStampAdapter(subcon)[source]#

Bases: Adapter

_decode(obj, context)[source]#
_encode(obj, context)[source]#
objutils.elf.calculate_crypto_hash(data: bytes) str[source]#