1#!/usr/bin/python 2 3from capstone import * 4from capstone.arm import * 5from capstone.arm64 import * 6from capstone.mips import * 7from capstone.ppc import * 8from capstone.sparc import * 9from capstone.systemz import * 10from capstone.x86 import * 11from capstone.xcore import * 12import sys 13 14# yes this is bad, importing ctypes like this, 15# but the Cs object did not have the group_name function 16from capstone import _cs 17 18class GroupTest: 19 def __init__(self, name, arch, mode, data): 20 self.name = name 21 self.arch = arch 22 self.mode = mode 23 self.data = data 24 25 def run(self): 26 print('Testing %s' %self.name) 27 cap = Cs(self.arch, self.mode) 28 for group_id in xrange(0,255): 29 name = self.data.get(group_id) 30 res = _cs.cs_group_name(cap.csh, group_id) 31 if res != name: 32 print("ERROR: expected '%s', but got '%s'" %(name, res)) 33 print("") 34 35arm_dict = { 36 ARM_GRP_JUMP: "jump", 37 38 ARM_GRP_CRYPTO: "crypto", 39 ARM_GRP_DATABARRIER: "databarrier", 40 ARM_GRP_DIVIDE: "divide", 41 ARM_GRP_FPARMV8: "fparmv8", 42 ARM_GRP_MULTPRO: "multpro", 43 ARM_GRP_NEON: "neon", 44 ARM_GRP_T2EXTRACTPACK: "T2EXTRACTPACK", 45 ARM_GRP_THUMB2DSP: "THUMB2DSP", 46 ARM_GRP_TRUSTZONE: "TRUSTZONE", 47 ARM_GRP_V4T: "v4t", 48 ARM_GRP_V5T: "v5t", 49 ARM_GRP_V5TE: "v5te", 50 ARM_GRP_V6: "v6", 51 ARM_GRP_V6T2: "v6t2", 52 ARM_GRP_V7: "v7", 53 ARM_GRP_V8: "v8", 54 ARM_GRP_VFP2: "vfp2", 55 ARM_GRP_VFP3: "vfp3", 56 ARM_GRP_VFP4: "vfp4", 57 ARM_GRP_ARM: "arm", 58 ARM_GRP_MCLASS: "mclass", 59 ARM_GRP_NOTMCLASS: "notmclass", 60 ARM_GRP_THUMB: "thumb", 61 ARM_GRP_THUMB1ONLY: "thumb1only", 62 ARM_GRP_THUMB2: "thumb2", 63 ARM_GRP_PREV8: "prev8", 64 ARM_GRP_FPVMLX: "fpvmlx", 65 ARM_GRP_MULOPS: "mulops", 66 ARM_GRP_CRC: "crc", 67 ARM_GRP_DPVFP: "dpvfp", 68 ARM_GRP_V6M: "v6m", 69} 70 71arm64_dict = { 72 ARM64_GRP_JUMP: "jump", 73 74 ARM64_GRP_CRYPTO: "crypto", 75 ARM64_GRP_FPARMV8: "fparmv8", 76 ARM64_GRP_NEON: "neon", 77 ARM64_GRP_CRC: "crc" 78} 79 80mips_dict = { 81 MIPS_GRP_JUMP: "jump", 82 MIPS_GRP_BITCOUNT: "bitcount", 83 MIPS_GRP_DSP: "dsp", 84 MIPS_GRP_DSPR2: "dspr2", 85 MIPS_GRP_FPIDX: "fpidx", 86 MIPS_GRP_MSA: "msa", 87 MIPS_GRP_MIPS32R2: "mips32r2", 88 MIPS_GRP_MIPS64: "mips64", 89 MIPS_GRP_MIPS64R2: "mips64r2", 90 MIPS_GRP_SEINREG: "seinreg", 91 MIPS_GRP_STDENC: "stdenc", 92 MIPS_GRP_SWAP: "swap", 93 MIPS_GRP_MICROMIPS: "micromips", 94 MIPS_GRP_MIPS16MODE: "mips16mode", 95 MIPS_GRP_FP64BIT: "fp64bit", 96 MIPS_GRP_NONANSFPMATH: "nonansfpmath", 97 MIPS_GRP_NOTFP64BIT: "notfp64bit", 98 MIPS_GRP_NOTINMICROMIPS: "notinmicromips", 99 MIPS_GRP_NOTNACL: "notnacl", 100 101 MIPS_GRP_NOTMIPS32R6: "notmips32r6", 102 MIPS_GRP_NOTMIPS64R6: "notmips64r6", 103 MIPS_GRP_CNMIPS: "cnmips", 104 105 MIPS_GRP_MIPS32: "mips32", 106 MIPS_GRP_MIPS32R6: "mips32r6", 107 MIPS_GRP_MIPS64R6: "mips64r6", 108 109 MIPS_GRP_MIPS2: "mips2", 110 MIPS_GRP_MIPS3: "mips3", 111 MIPS_GRP_MIPS3_32: "mips3_32", 112 MIPS_GRP_MIPS3_32R2: "mips3_32r2", 113 114 MIPS_GRP_MIPS4_32: "mips4_32", 115 MIPS_GRP_MIPS4_32R2: "mips4_32r2", 116 MIPS_GRP_MIPS5_32R2: "mips5_32r2", 117 118 MIPS_GRP_GP32BIT: "gp32bit", 119 MIPS_GRP_GP64BIT: "gp64bit", 120} 121 122ppc_dict = { 123 PPC_GRP_JUMP: "jump", 124 125 PPC_GRP_ALTIVEC: "altivec", 126 PPC_GRP_MODE32: "mode32", 127 PPC_GRP_MODE64: "mode64", 128 PPC_GRP_BOOKE: "booke", 129 PPC_GRP_NOTBOOKE: "notbooke", 130 PPC_GRP_SPE: "spe", 131 PPC_GRP_VSX: "vsx", 132 PPC_GRP_E500: "e500", 133 PPC_GRP_PPC4XX: "ppc4xx", 134 PPC_GRP_PPC6XX: "ppc6xx", 135} 136 137sparc_dict = { 138 SPARC_GRP_JUMP: "jump", 139 140 SPARC_GRP_HARDQUAD: "hardquad", 141 SPARC_GRP_V9: "v9", 142 SPARC_GRP_VIS: "vis", 143 SPARC_GRP_VIS2: "vis2", 144 SPARC_GRP_VIS3: "vis3", 145 SPARC_GRP_32BIT: "32bit", 146 SPARC_GRP_64BIT: "64bit", 147} 148 149sysz_dict = { 150 SYSZ_GRP_JUMP: "jump", 151 152 SYSZ_GRP_DISTINCTOPS: "distinctops", 153 SYSZ_GRP_FPEXTENSION: "fpextension", 154 SYSZ_GRP_HIGHWORD: "highword", 155 SYSZ_GRP_INTERLOCKEDACCESS1: "interlockedaccess1", 156 SYSZ_GRP_LOADSTOREONCOND: "loadstoreoncond", 157} 158 159x86_dict = { 160 X86_GRP_JUMP: "jump", 161 X86_GRP_CALL: "call", 162 X86_GRP_RET: "ret", 163 X86_GRP_INT: "int", 164 X86_GRP_IRET: "iret", 165 166 X86_GRP_VM: "vm", 167 X86_GRP_3DNOW: "3dnow", 168 X86_GRP_AES: "aes", 169 X86_GRP_ADX: "adx", 170 X86_GRP_AVX: "avx", 171 X86_GRP_AVX2: "avx2", 172 X86_GRP_AVX512: "avx512", 173 X86_GRP_BMI: "bmi", 174 X86_GRP_BMI2: "bmi2", 175 X86_GRP_CMOV: "cmov", 176 X86_GRP_F16C: "fc16", 177 X86_GRP_FMA: "fma", 178 X86_GRP_FMA4: "fma4", 179 X86_GRP_FSGSBASE: "fsgsbase", 180 X86_GRP_HLE: "hle", 181 X86_GRP_MMX: "mmx", 182 X86_GRP_MODE32: "mode32", 183 X86_GRP_MODE64: "mode64", 184 X86_GRP_RTM: "rtm", 185 X86_GRP_SHA: "sha", 186 X86_GRP_SSE1: "sse1", 187 X86_GRP_SSE2: "sse2", 188 X86_GRP_SSE3: "sse3", 189 X86_GRP_SSE41: "sse41", 190 X86_GRP_SSE42: "sse42", 191 X86_GRP_SSE4A: "sse4a", 192 X86_GRP_SSSE3: "ssse3", 193 X86_GRP_PCLMUL: "pclmul", 194 X86_GRP_XOP: "xop", 195 X86_GRP_CDI: "cdi", 196 X86_GRP_ERI: "eri", 197 X86_GRP_TBM: "tbm", 198 X86_GRP_16BITMODE: "16bitmode", 199 X86_GRP_NOT64BITMODE: "not64bitmode", 200 X86_GRP_SGX: "sgx", 201 X86_GRP_DQI: "dqi", 202 X86_GRP_BWI: "bwi", 203 X86_GRP_PFI: "pfi", 204 X86_GRP_VLX: "vlx", 205 X86_GRP_SMAP: "smap", 206 X86_GRP_NOVLX: "novlx", 207} 208 209xcore_dict = { 210 XCORE_GRP_JUMP: "jump", 211} 212 213tests = [ 214 GroupTest('arm', CS_ARCH_ARM, CS_MODE_THUMB, arm_dict), 215 GroupTest('arm64', CS_ARCH_ARM64, CS_MODE_ARM, arm64_dict), 216 GroupTest('mips', CS_ARCH_MIPS, CS_MODE_MIPS32 | CS_MODE_BIG_ENDIAN, mips_dict), 217 GroupTest('ppc', CS_ARCH_PPC, CS_MODE_BIG_ENDIAN, ppc_dict), 218 GroupTest('sparc', CS_ARCH_SPARC, CS_MODE_BIG_ENDIAN, sparc_dict), 219 GroupTest('sysz', CS_ARCH_SYSZ, CS_MODE_BIG_ENDIAN, sysz_dict), 220 GroupTest('x86', CS_ARCH_X86, CS_MODE_32, x86_dict), 221 GroupTest('xcore', CS_ARCH_XCORE, CS_MODE_BIG_ENDIAN, xcore_dict), 222] 223 224if __name__ == '__main__': 225 args = sys.argv[1:] 226 all = len(args) == 0 or 'all' in args 227 for t in tests: 228 if all or t.name in args: 229 t.run() 230 else: 231 print('Skipping %s' %t.name) 232 233