Commit 07722d90 authored by Sascha Schirra's avatar Sascha Schirra
Browse files

ARM64 support added

parent 3a38d190
Loading
Loading
Loading
Loading
+16 −0
Original line number Diff line number Diff line
@@ -141,8 +141,24 @@ class ArchitectureArm(Architecture):
                                                ('\x01\x80\xbd\xe8', 4)] # ldm sp! ,{pc}


class ArchitectureArm64(Architecture):

    def __init__(self):
        Architecture.__init__(self, CS_ARCH_ARM64, CS_MODE_ARM, 4, 4)

    def _initGadgets(self):
        self._endings[gadget.GadgetType.ROP] = [('[\x00\x20\x40\x60\x80\xa0\xc0\xe0][\x00-\x02]\x5f\xd6', 4), # ret <reg>
                                                ('[\x00\x20\x40\x60\x80]\x03\x5f\xd6', 4),
                                                ('\xc0\x03\x5f\xd6', 4)] # ret <reg>
        self._endings[gadget.GadgetType.JOP] = [('[\x00\x20\x40\x60\x80\xa0\xc0\xe0][\x00-\x02]\x1f\xd6', 4), # bx <reg>
                                                ('[\x00\x20\x40\x60\x80]\x03\x1f\xd6', 4), # blx <reg>
                                                ('[\x00\x20\x40\x60\x80\xa0\xc0\xe0][\x00-\x02]\x3f\xd6', 4),
                                                ('[\x00\x20\x40\x60\x80]\x03\x3f\xd6', 4)] # ldm sp! ,{pc}


x86 = ArchitectureX86()
x86_64 = ArchitectureX86_64()
MIPS = ArchitectureMips()
MIPS64 = ArchitectureMips64()
ARM = ArchitectureArm()
ARM64 = ArchitectureArm64()
 No newline at end of file
+3 −1
Original line number Diff line number Diff line
@@ -111,6 +111,7 @@ class EM(Enum):
    ARC_A5 = 93
    XTENSA = 94
    NUM = 95
    ARM64 = 183


class EI(Enum):
@@ -270,4 +271,5 @@ ARCH = {(EM.INTEL_386 , ELFCLASS.BITS_32): x86,
        (EM.X86_64, ELFCLASS.BITS_64): x86_64,
        (EM.MIPS, ELFCLASS.BITS_32): MIPS,
        (EM.MIPS, ELFCLASS.BITS_64): MIPS64,
        (EM.ARM, ELFCLASS.BITS_32) : ARM}
        (EM.ARM, ELFCLASS.BITS_32) : ARM,
        (EM.ARM64, ELFCLASS.BITS_64) : ARM64}
+0 −1
Original line number Diff line number Diff line
@@ -84,7 +84,6 @@ class ImageDllCharacteristics(Enum):

ARCH = {int(IMAGE_FILE_MACHINE.AMD64):
        x86_64, int(IMAGE_FILE_MACHINE.I386): x86,
        int(IMAGE_FILE_MACHINE.IA64) : x86_64,
        int(IMAGE_FILE_MACHINE.ARM) : ARM,
        int(IMAGE_FILE_MACHINE.ARMV) : ARM}