static int decompile_vle(RAsm *a, RAsmOp *op, const ut8 *buf, int len) { vle_t* instr = 0; vle_handle handle = {0}; if (len < 2) { return -1; } if (!vle_init (&handle, buf, len) && (instr = vle_next (&handle))) { op->size = instr->size; vle_snprint (op->buf_asm, R_ASM_BUFSIZE, a->pc, instr); vle_free (instr); } else { strcpy (op->buf_asm, "invalid"); op->size = 2; return -1; } return op->size; }
static int analop_vle(RAnal *a, RAnalOp *op, ut64 addr, const ut8 *buf, int len) { vle_t* instr = NULL; vle_handle handle = {0}; op->size = 2; if (len > 1 && !vle_init (&handle, buf, len) && (instr = vle_next (&handle))) { op->size = instr->size; op->type = instr->anal_op; //op->id = instr->type; switch (op->type) { case R_ANAL_OP_TYPE_ILL: break; case R_ANAL_OP_TYPE_ADD: break; case R_ANAL_OP_TYPE_AND: break; case R_ANAL_OP_TYPE_CALL: op->jump = addr + instr->fields[instr->n - 1].value; op->fail = addr + op->size; break; case R_ANAL_OP_TYPE_CCALL: op->eob = true; op->jump = addr + instr->fields[instr->n - 1].value; op->fail = addr + op->size; break; case R_ANAL_OP_TYPE_CJMP: op->cond = instr->cond; //R_ANAL_COND_NE; op->eob = true; op->jump = addr + instr->fields[instr->n - 1].value; op->fail = addr + op->size; break; case R_ANAL_OP_TYPE_CMP: break; case R_ANAL_OP_TYPE_JMP: op->jump = addr + instr->fields[instr->n - 1].value; break; case R_ANAL_OP_TYPE_LOAD: break; case R_ANAL_OP_TYPE_MOV: break; case R_ANAL_OP_TYPE_MUL: break; case R_ANAL_OP_TYPE_NOT: break; case R_ANAL_OP_TYPE_OR: break; case R_ANAL_OP_TYPE_ROR: break; case R_ANAL_OP_TYPE_ROL: break; case R_ANAL_OP_TYPE_RCALL: op->eob = true; break; case R_ANAL_OP_TYPE_RET: op->eob = true; break; case R_ANAL_OP_TYPE_RJMP: break; case R_ANAL_OP_TYPE_SHL: break; case R_ANAL_OP_TYPE_SHR: break; case R_ANAL_OP_TYPE_STORE: break; case R_ANAL_OP_TYPE_SUB: break; case R_ANAL_OP_TYPE_SWI: break; case R_ANAL_OP_TYPE_SYNC: break; case R_ANAL_OP_TYPE_TRAP: break; case R_ANAL_OP_TYPE_XOR: break; default: //eprintf ("Missing an R_ANAL_OP_TYPE (%"PFMT64u")\n", op->type); break; } vle_free (instr); return op->size; } return -1; }