--- a/ropgadget/gadgets.py +++ b/ropgadget/gadgets.py @@ -8,6 +8,12 @@ import re +try: + # CS_ARCH_ARM64 was renamed to CS_ARCH_AARCH64 from Capstone 5 to 6 + from capstone import CS_ARCH_ARM64 as CS_ARCH_AARCH64 +except ImportError: + pass + from capstone import * @@ -21,7 +27,7 @@ class Gadgets(object): re_str = "" if self.__arch == CS_ARCH_X86: re_str = "db|int3" - elif self.__arch == CS_ARCH_ARM64: + elif self.__arch == CS_ARCH_AARCH64: re_str = "brk|smc|hvc" if self.__options.filter: if re_str: @@ -169,7 +175,7 @@ class Gadgets(object): elif arch == CS_ARCH_ARM: gadgets = [] # ARM doesn't have RET instructions. Only JOP gadgets - elif arch == CS_ARCH_ARM64: + elif arch == CS_ARCH_AARCH64: if arch_endian == CS_MODE_BIG_ENDIAN: gadgets = [ [br"\xd6\x5f\x03\xc0", 4, 4] # ret @@ -305,7 +311,7 @@ class Gadgets(object): [br"\x00[\x00\x40\x80\xc0]{1}\xc0\x81", 4, 4] # jmp %g[0-3] ] arch_mode = 0 - elif arch == CS_ARCH_ARM64: + elif arch == CS_ARCH_AARCH64: if arch_endian == CS_MODE_BIG_ENDIAN: gadgets = [ [br"\xd6[\x1f\x5f]{1}[\x00-\x03]{1}[\x00\x20\x40\x60\x80\xa0\xc0\xe0]{1}", 4, 4], # br reg @@ -432,7 +438,7 @@ class Gadgets(object): elif arch == CS_ARCH_SPARC: gadgets = [] # TODO (ta inst) - elif arch == CS_ARCH_ARM64: + elif arch == CS_ARCH_AARCH64: gadgets = [] # TODO elif arch == CS_ARCH_ARM: if self.__options.thumb or self.__options.rawMode == "thumb": --- a/ropgadget/loaders/elf.py +++ b/ropgadget/loaders/elf.py @@ -8,6 +8,12 @@ from ctypes import * +try: + # CS_ARCH_ARM64 was renamed to CS_ARCH_AARCH64 from Capstone 5 to 6 + from capstone import CS_ARCH_ARM64 as CS_ARCH_AARCH64 +except ImportError: + pass + from capstone import * @@ -334,7 +340,7 @@ class ELF(object): elif self.__ElfHeader.e_machine == ELFFlags.EM_ARM: return CS_ARCH_ARM elif self.__ElfHeader.e_machine == ELFFlags.EM_ARM64: - return CS_ARCH_ARM64 + return CS_ARCH_AARCH64 elif self.__ElfHeader.e_machine == ELFFlags.EM_MIPS: return CS_ARCH_MIPS elif self.__ElfHeader.e_machine == ELFFlags.EM_PowerPC or self.__ElfHeader.e_machine == ELFFlags.EM_PPC64: --- a/ropgadget/loaders/macho.py +++ b/ropgadget/loaders/macho.py @@ -8,6 +8,12 @@ from ctypes import * +try: + # CS_ARCH_ARM64 was renamed to CS_ARCH_AARCH64 from Capstone 5 to 6 + from capstone import CS_ARCH_ARM64 as CS_ARCH_AARCH64 +except ImportError: + pass + from capstone import * @@ -304,7 +310,7 @@ class MACHO(object): if self.__machHeader.cputype == MACHOFlags.CPU_TYPE_ARM: return CS_ARCH_ARM if self.__machHeader.cputype == MACHOFlags.CPU_TYPE_ARM64: - return CS_ARCH_ARM64 + return CS_ARCH_AARCH64 if self.__machHeader.cputype == MACHOFlags.CPU_TYPE_MIPS: return CS_ARCH_MIPS if self.__machHeader.cputype == MACHOFlags.CPU_TYPE_POWERPC or self.__machHeader.cputype == MACHOFlags.CPU_TYPE_POWERPC64: --- a/ropgadget/loaders/raw.py +++ b/ropgadget/loaders/raw.py @@ -6,6 +6,12 @@ ## http://twitter.com/JonathanSalwan ## +try: + # CS_ARCH_ARM64 was renamed to CS_ARCH_AARCH64 from Capstone 5 to 6 + from capstone import CS_ARCH_ARM64 as CS_ARCH_AARCH64 +except ImportError: + pass + from capstone import * @@ -29,7 +35,7 @@ class Raw(object): arch = { "x86": CS_ARCH_X86, "arm": CS_ARCH_ARM, - "arm64": CS_ARCH_ARM64, + "arm64": CS_ARCH_AARCH64, "sparc": CS_ARCH_SPARC, "mips": CS_ARCH_MIPS, "ppc": CS_ARCH_PPC,