mirror of
https://github.com/espressif/esp-idf.git
synced 2024-10-05 20:47:46 -04:00
39 lines
1.0 KiB
Python
39 lines
1.0 KiB
Python
|
from .. import *
|
||
|
from ..types import *
|
||
|
from ..constants import *
|
||
|
from ctypes import *
|
||
|
import os
|
||
|
|
||
|
def _class(elf): return ord(elf_getident(elf, None).contents[EI_CLASS])
|
||
|
|
||
|
def is32(elf): return _class(elf) == ELFCLASS32
|
||
|
def is64(elf): return _class(elf) == ELFCLASS64
|
||
|
|
||
|
def select(elf, fname):
|
||
|
if is32(elf):
|
||
|
return globals()['elf32_' + fname]
|
||
|
else:
|
||
|
return globals()['elf64_' + fname]
|
||
|
|
||
|
def section_name(elfP, secP):
|
||
|
shstrndx = c_size_t()
|
||
|
r = elf_getshstrndx(elfP, byref(shstrndx))
|
||
|
shdr = select(elfP, 'getshdr')(secP)
|
||
|
return elf_strptr(elfP, shstrndx, shdr.contents.sh_name)
|
||
|
|
||
|
def section_type(elfP, secP):
|
||
|
return select(elfP, 'getshdr')(secP).contents.sh_type
|
||
|
|
||
|
def section_link(elfP, secP):
|
||
|
return select(elfP, 'getshdr')(secP).contents.sh_link
|
||
|
|
||
|
def section_hdr(elfP, secP):
|
||
|
return select(elfP, 'getshdr')(secP).contents
|
||
|
|
||
|
def open_elf(fname):
|
||
|
fd = os.open(fname, os.O_RDONLY)
|
||
|
return elf_begin(fd, ELF_C_READ, None)
|
||
|
|
||
|
def sym_name(elf, scn, sym):
|
||
|
return elf_strptr(elf, section_link(elf, scn), sym.st_name)
|