diff --git a/cle/backends/elf/elf.py b/cle/backends/elf/elf.py index 011acd4d..7e33e88d 100644 --- a/cle/backends/elf/elf.py +++ b/cle/backends/elf/elf.py @@ -10,6 +10,7 @@ from typing import cast import archinfo +from elf_tools.elf.constans.E_FLAGS import EF_ARM_BE8 from elftools.common.exceptions import DWARFError, ELFError, ELFParseError from elftools.dwarf import callframe from elftools.dwarf.compileunit import CompileUnit @@ -339,6 +340,8 @@ def extract_arch(reader): return archinfo.ArchARMEL("Iend_LE" if reader.little_endian else "Iend_BE") elif reader.header.e_flags & 0x400: return archinfo.ArchARMHF("Iend_LE" if reader.little_endian else "Iend_BE") + elif reader.header.e_flags & EF_ARM_BE8: # ARM-BE8 has big endian data and little endian instructions + return archinfo.ArchARMEL("Iend_LE") try: return archinfo.arch_from_id(arch_str, "le" if reader.little_endian else "be", reader.elfclass)