| 1234567891011121314151617181920212223242526272829303132333435363738 |
- 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)
|