Esempio n. 1
0
 def from_bytes(b):
     e_ident, b = Elf32_e_ident.from_bytes(b)
     # througout this function we rely only on ELF header regarding
     # endianness
     little = e_ident.EI_DATA is ELFDATA.ELFDATA2LSB
     e_type, b = ET.from_bytes(b, little=little)
     e_machine, b = EM.from_bytes(b, little=little)
     # TODO: use Elf*_Word or similar to be able to create second header -
     # Elf64_Ehdr for amd64
     e_version, b = uint32.from_bytes(b, little=little)
     e_entry, b = uint32.from_bytes(b, little=little) # || 64b
     e_phoff, b = uint32.from_bytes(b, little=little) # || 64b
     e_shoff, b = uint32.from_bytes(b, little=little) # || 64b
     e_flags, b = uint32.from_bytes(b, little=little)
     e_ehsize, b = uint16.from_bytes(b, little=little)
     e_phentsize, b = uint16.from_bytes(b, little=little)
     e_phnum, b = uint16.from_bytes(b, little=little)
     e_shentsize, b = uint16.from_bytes(b, little=little)
     e_shnum, b = uint16.from_bytes(b, little=little)
     e_shstrndx, b = uint16.from_bytes(b, little=little)
     Ehdr = Elf32_Ehdr(e_ident=e_ident, e_type=e_type, e_machine=e_machine,
             e_version=e_version.integer, e_entry=e_entry.integer,
             e_phoff=e_phoff.integer, e_shoff=e_shoff.integer,
             e_flags=e_flags.integer, e_ehsize=e_ehsize.integer,
             e_phentsize=e_phentsize.integer, e_phnum=e_phnum.integer,
             e_shentsize=e_shentsize.integer, e_shnum=e_shnum.integer,
             e_shstrndx=e_shstrndx.integer)
     return Ehdr, b
Esempio n. 2
0
    def from_bytes(b, little=False):
        r_offset, b = uint32.from_bytes(b, little)
        r_info, b = uint32.from_bytes(b, little)
        r_addend, b = uint32.from_bytes(b, little)

        return Elf32_Phdr(r_offset=r_offset.integer,
                          r_info=r_info.integer,
                          r_addend=r_addend.integer,
                          little=little), b
Esempio n. 3
0
    def from_bytes(b, little=False):
        st_name, b = uint32.from_bytes(b, little=little)
        st_value, b = uint32.from_bytes(b, little=little)
        st_size, b = uint32.from_bytes(b, little=little)
        st_info, b = uint8.from_bytes(b, little=little)
        st_other, b = uint8.from_bytes(b, little=little)
        st_shndx, b = uint16.from_bytes(b, little=little)

        return Elf32_Sym(st_name.integer, st_value.integer, st_size.integer,
                st_info.integer, st_other.integer, st_shndx.integer, little), b
Esempio n. 4
0
    def from_bytes(b, little=False):
        sh_name, b = uint32.from_bytes(b, little=little)
        sh_type, b = uint32.from_bytes(b, little=little)
        sh_flags, b = uint32.from_bytes(b, little=little)
        sh_addr, b = uint32.from_bytes(b, little=little)
        sh_offset, b = uint32.from_bytes(b, little=little)
        sh_size, b = uint32.from_bytes(b, little=little)
        sh_link, b = uint32.from_bytes(b, little=little)
        sh_info, b = uint32.from_bytes(b, little=little)
        sh_addralign, b = uint32.from_bytes(b, little=little)
        sh_entsize, b = uint32.from_bytes(b, little=little)

        return Elf32_Shdr(sh_name.integer, sh_type.integer, sh_flags.integer,
                sh_addr.integer, sh_offset.integer, sh_size.integer,
                sh_link.integer, sh_info.integer, sh_addralign.integer,
                sh_entsize.integer, little=little), b
Esempio n. 5
0
    def from_bytes(b, little=False):
        p_type, b = uint32.from_bytes(b, little)
        p_offset, b = uint32.from_bytes(b, little)
        p_vaddr, b = uint32.from_bytes(b, little)
        p_paddr, b = uint32.from_bytes(b, little)
        p_filesz, b = uint32.from_bytes(b, little)
        p_memsz, b = uint32.from_bytes(b, little)
        p_flags, b = uint32.from_bytes(b, little)
        p_align, b = uint32.from_bytes(b, little)

        return Elf32_Phdr(p_type=p_type.integer, p_offset=p_offset.integer,
                p_vaddr=p_vaddr.integer, p_paddr=p_paddr.integer,
                p_filesz=p_filesz.integer, p_memsz=p_memsz.integer,
                p_flags=p_flags.integer, p_align=p_align.integer, little=little
                ), b
Esempio n. 6
0
 def from_bytes(b, little=False):
     d_tag, b = uint32.from_bytes(b, little)
     d_val, b = uint32.from_bytes(b, little)
     d_ptr = d_val
     return Elf32_Dyn(d_tag.integer, d_val.integer, d_ptr.integer,
                      little), b