UNPKG

ts-capstone

Version:

This module provides bindings for the Capstone disassembly framework.

436 lines (409 loc) 8.02 kB
export interface cs_sh_op { type: SH; imm?: number; // immediate value for IMM operand reg?: SH; // register value for REG operand mem?: { // data when operand is targeting memory address: SH; // memory address reg: SH; // base register disp: number; // displacement }; } export enum SH { // SH registers and special registers REG_INVALID = 0, REG_R0, REG_R1, REG_R2, REG_R3, REG_R4, REG_R5, REG_R6, REG_R7, REG_R8, REG_R9, REG_R10, REG_R11, REG_R12, REG_R13, REG_R14, REG_R15, REG_R0_BANK, REG_R1_BANK, REG_R2_BANK, REG_R3_BANK, REG_R4_BANK, REG_R5_BANK, REG_R6_BANK, REG_R7_BANK, REG_FR0, REG_FR1, REG_FR2, REG_FR3, REG_FR4, REG_FR5, REG_FR6, REG_FR7, REG_FR8, REG_FR9, REG_FR10, REG_FR11, REG_FR12, REG_FR13, REG_FR14, REG_FR15, REG_DR0, REG_DR2, REG_DR4, REG_DR6, REG_DR8, REG_DR10, REG_DR12, REG_DR14, REG_XD0, REG_XD2, REG_XD4, REG_XD6, REG_XD8, REG_XD10, REG_XD12, REG_XD14, REG_XF0, REG_XF1, REG_XF2, REG_XF3, REG_XF4, REG_XF5, REG_XF6, REG_XF7, REG_XF8, REG_XF9, REG_XF10, REG_XF11, REG_XF12, REG_XF13, REG_XF14, REG_XF15, REG_FV0, REG_FV4, REG_FV8, REG_FV12, REG_XMATRX, REG_PC, REG_PR, REG_MACH, REG_MACL, REG_SR, REG_GBR, REG_SSR, REG_SPC, REG_SGR, REG_DBR, REG_VBR, REG_TBR, REG_RS, REG_RE, REG_MOD, REG_FPUL, REG_FPSCR, REG_DSP_X0, REG_DSP_X1, REG_DSP_Y0, REG_DSP_Y1, REG_DSP_A0, REG_DSP_A1, REG_DSP_A0G, REG_DSP_A1G, REG_DSP_M0, REG_DSP_M1, REG_DSP_DSR, REG_DSP_RSV0, REG_DSP_RSV1, REG_DSP_RSV2, REG_DSP_RSV3, REG_DSP_RSV4, REG_DSP_RSV5, REG_DSP_RSV6, REG_DSP_RSV7, REG_DSP_RSV8, REG_DSP_RSV9, REG_DSP_RSVA, REG_DSP_RSVB, REG_DSP_RSVC, REG_DSP_RSVD, REG_DSP_RSVE, REG_DSP_RSVF, REG_ENDING, // mark the end of the list of registers OP_INVALID = 0, // = cs.OP_INVALID (Uninitialized). OP_REG = 1, // = cs.OP_REG (Register operand). OP_IMM = 2, // = cs.OP_IMM (Immediate operand). OP_MEM = 3, // = cs.OP_MEM (Memory operand). OP_MEM_INVALID = 0, // Invalid OP_MEM_REG_IND = 1, // Register indirect OP_MEM_REG_POST = 2, // Register post increment OP_MEM_REG_PRE = 3, // Register pre decrement OP_MEM_REG_DISP = 4, // displacement OP_MEM_REG_R0 = 5, // R0 indexed OP_MEM_GBR_DISP = 6, // GBR based displacement OP_MEM_GBR_R0 = 7, // GBR based R0 indexed OP_MEM_PCR = 8, // PC relative OP_MEM_TBR_DISP = 9, // TBR based displaysment // SH-DSP instructions define INS_DSP_INVALID = 0, INS_DSP_DOUBLE = 1, INS_DSP_SINGLE = 2, INS_DSP_PARALLEL = 3, OP_DSP_INVALID = 0, OP_DSP_REG_PRE = 1, OP_DSP_REG_IND = 2, OP_DSP_REG_POST = 3, OP_DSP_REG_INDEX = 4, OP_DSP_REG = 5, OP_DSP_IMM = 6, DSP_CC_INVALID = 0, DSP_CC_NONE = 1, DSP_CC_DCT = 2, DSP_CC_DCF = 3, INS_DSP_NOP = 1, INS_DSP_MOV = 2, INS_DSP_PSHL = 3, INS_DSP_PSHA = 4, INS_DSP_PMLS = 5, INS_DSP_PCLR_PMLS = 6, INS_DSP_PSB_PMLS = 7, INS_DSP_PADD_PMLS = 8, INS_DSP_PSBC = 9, INS_DSP_PADDC = 10, INS_DSP_PCMP = 11, INS_DSP_PABS = 12, INS_DSP_PRND = 13, INS_DSP_PSB = 14, INS_DSP_PSBr = 15, INS_DSP_PADD = 16, INS_DSP_PAND = 17, INS_DSP_PXOR = 18, INS_DSP_POR = 19, INS_DSP_PDEC = 20, INS_DSP_PINC = 21, INS_DSP_PCLR = 22, INS_DSP_PDMSB = 23, INS_DSP_PNEG = 24, INS_DSP_PCOPY = 25, INS_DSP_PSTS = 26, INS_DSP_PLDS = 27, INS_DSP_PSWAP = 28, INS_DSP_PWAD = 29, INS_DSP_PWSB = 30, // SH instruction INS_INVALID = 0, INS_ADD_r = 1, INS_ADD = 2, INS_ADDC = 3, INS_ADDV = 4, INS_AND = 5, INS_BAND = 6, INS_BANDNOT = 7, INS_BCLR = 8, INS_BF = 9, INS_BF_S = 10, INS_BLD = 11, INS_BLDNOT = 12, INS_BOR = 13, INS_BORNOT = 14, INS_BRA = 15, INS_BRAF = 16, INS_BSET = 17, INS_BSR = 18, INS_BSRF = 19, INS_BST = 20, INS_BT = 21, INS_BT_S = 22, INS_BXOR = 23, INS_CLIPS = 24, INS_CLIP = 25, INS_CLRDMXY = 26, INS_CLRMAC = 27, INS_CLRS = 28, INS_CLRT = 29, INS_CMP_EQ = 30, INS_CMP_GE = 31, INS_CMP_GT = 32, INS_CMP_HI = 33, INS_CMP_HS = 34, INS_CMP_PL = 35, INS_CMP_PZ = 36, INS_CMP_STR = 37, INS_DIV0S = 38, INS_DIV0 = 39, INS_DIV1 = 40, INS_DIVS = 41, INS_DIV = 42, INS_DMLS_L = 43, INS_DML_L = 44, INS_DT = 45, INS_EXTS_B = 46, INS_EXTS_W = 47, INS_EXT_B = 48, INS_EXT_W = 49, INS_FABS = 50, INS_FADD = 51, INS_FCMP_EQ = 52, INS_FCMP_GT = 53, INS_FCNVDS = 54, INS_FCNVSD = 55, INS_FDIV = 56, INS_FIPR = 57, INS_FLDI0 = 58, INS_FLDI1 = 59, INS_FLDS = 60, INS_FLOAT = 61, INS_FMAC = 62, INS_FMOV = 63, INS_FML = 64, INS_FNEG = 65, INS_FPCHG = 66, INS_FRCHG = 67, INS_FSCA = 68, INS_FSCHG = 69, INS_FSQRT = 70, INS_FSRRA = 71, INS_FSTS = 72, INS_FSB = 73, INS_FTRC = 74, INS_FTRV = 75, INS_ICBI = 76, INS_JMP = 77, INS_JSR = 78, INS_JSR_N = 79, INS_LDBANK = 80, INS_LDC = 81, INS_LDRC = 82, INS_LDRE = 83, INS_LDRS = 84, INS_LDS = 85, INS_LDTLB = 86, INS_MAC_L = 87, INS_MAC_W = 88, INS_MOV = 89, INS_MOVA = 90, INS_MOVCA = 91, INS_MOVCO = 92, INS_MOVI20 = 93, INS_MOVI20S = 94, INS_MOVLI = 95, INS_MOVML = 96, INS_MOVM = 97, INS_MOVRT = 98, INS_MOVT = 99, INS_ML_L = 100, INS_MLR = 101, INS_MLS_W = 102, INS_ML_W = 103, INS_NEG = 104, INS_NEGC = 105, INS_NOP = 106, INS_NOT = 107, INS_NOTT = 108, INS_OCBI = 109, INS_OCBP = 110, INS_OCBWB = 111, INS_OR = 112, INS_PREF = 113, INS_PREFI = 114, INS_RESBANK = 115, INS_ROTCL = 116, INS_ROTCR = 117, INS_ROTL = 118, INS_ROTR = 119, INS_RTE = 120, INS_RTS = 121, INS_RTS_N = 122, INS_RTV_N = 123, INS_SETDMX = 124, INS_SETDMY = 125, INS_SETRC = 126, INS_SETS = 127, INS_SETT = 128, INS_SHAD = 129, INS_SHAL = 130, INS_SHAR = 131, INS_SHLD = 132, INS_SHLL = 133, INS_SHLL16 = 134, INS_SHLL2 = 135, INS_SHLL8 = 136, INS_SHLR = 137, INS_SHLR16 = 138, INS_SHLR2 = 139, INS_SHLR8 = 140, INS_SLEEP = 141, INS_STBANK = 142, INS_STC = 143, INS_STS = 144, INS_SB = 145, INS_SBC = 146, INS_SBV = 147, INS_SWAP_B = 148, INS_SWAP_W = 149, INS_SYNCO = 150, INS_TAS = 151, INS_TRAPA = 152, INS_TST = 153, INS_XOR = 154, INS_XTRCT = 155, INS_DSP = 156, INS_ENDING = 157, // mark the end of the list of instructions GRP_INVALID = 0, // cs.GRP_INVALID GRP_JMP = 1, // = cs.GRP_JMP GRP_CALL = 2, // = cs.GRP_CALL GRP_INT = 3, // = cs.GRP_INT GRP_RET = 4, // = cs.GRP_RET GRP_IRET = 5, // = cs.GRP_IRET GRP_PRIVILEGE = 6, // = cs.GRP_PRIVILEGE GRP_BRANCH_RELATIVE = 7, // = cs.GRP_BRANCH_RELATIVE GRP_SH1 = 8, GRP_SH2 = 9, GRP_SH2E = 10, GRP_SH2DSP = 11, GRP_SH2A = 12, GRP_SH2AFP = 13, GRP_SH3 = 14, GRP_SH3DSP = 15, GRP_SH4 = 16, GRP_SH4A = 17, GRP_ENDING = 18, // mark the end of the list of groups } export class cs_sh { public insn: SH; public size: number; public op_count: number; public operands: cs_sh_op[]; constructor(arch_info_ptr: number, Memory: any) { this.operands = []; this.insn = Memory.read(arch_info_ptr + 0, 'u32'); this.size = Memory.read(arch_info_ptr + 4, 'ubyte'); this.op_count = Memory.read(arch_info_ptr + 5, 'ubyte'); for (let i = 0; i < this.op_count; i++) { const op: cs_sh_op = {} as cs_sh_op; const op_ptr: number = arch_info_ptr + 8 + i * 58; op.type = Memory.read(op_ptr + 0, 'i32'); switch (op.type) { case SH.OP_IMM: op.imm = Memory.read(op_ptr + 8, 'i64'); break; case SH.OP_REG: op.reg = Memory.read(op_ptr + 8, 'i32'); break; case SH.OP_MEM: op.mem = { address: Memory.read(op_ptr + 8, 'i32'), reg: Memory.read(op_ptr + 12, 'i32'), disp: Memory.read(op_ptr + 16, 'i32'), }; break; } this.operands[i] = op; } return this; } }