static const char *parse_alias(RReg *reg, char **tok, const int n) { if (n != 2) return "Invalid syntax"; int role = r_reg_get_name_idx (tok[0] + 1); return r_reg_set_name (reg, role, tok[1]) ? NULL : "Invalid alias"; }
R_API int r_anal_esil_to_reil_setup(RAnalEsil *esil, RAnal *anal, int romem, int stats) { if (!esil) return false; esil->debug = 1; esil->anal = anal; esil->trap = 0; esil->trap_code = 0; /* Set up a callback for hook_command */ esil->cb.hook_command = setup_reil_ins; esil->Reil = R_NEW0(RAnalReil); if (!esil->Reil) { return false; } esil->Reil->reilNextTemp = 0; esil->Reil->addr = -1; esil->Reil->seq_num = 0; esil->Reil->skip = 0; // Store the pc const char *name = r_reg_get_name (esil->anal->reg, r_reg_get_name_idx ("PC")); strncpy (esil->Reil->pc, name, sizeof(esil->Reil->pc) - 1); r_anal_esil_mem_ro(esil, romem); r_anal_esil_set_op(esil, "=", reil_eq); r_anal_esil_set_op(esil, "+", reil_add); r_anal_esil_set_op(esil, "+=", reil_addeq); r_anal_esil_set_op(esil, "-", reil_sub); r_anal_esil_set_op(esil, "-=", reil_subeq); r_anal_esil_set_op(esil, "*", reil_mul); r_anal_esil_set_op(esil, "*=", reil_muleq); r_anal_esil_set_op(esil, "/", reil_div); r_anal_esil_set_op(esil, "/=", reil_diveq); r_anal_esil_set_op(esil, "^", reil_xor); r_anal_esil_set_op(esil, "^=", reil_xoreq); r_anal_esil_set_op(esil, "|", reil_or); r_anal_esil_set_op(esil, "|=", reil_oreq); r_anal_esil_set_op(esil, "&", reil_and); r_anal_esil_set_op(esil, "&=", reil_andeq); r_anal_esil_set_op(esil, "<<", reil_lsl); r_anal_esil_set_op(esil, "<<=", reil_lsleq); r_anal_esil_set_op(esil, ">>", reil_lsr); r_anal_esil_set_op(esil, ">>=", reil_lsreq); r_anal_esil_set_op(esil, "++=", reil_inceq); r_anal_esil_set_op(esil, "++", reil_inc); r_anal_esil_set_op(esil, "--=", reil_deceq); r_anal_esil_set_op(esil, "--", reil_dec); r_anal_esil_set_op(esil, "!", reil_neg); r_anal_esil_set_op(esil, "!=", reil_negeq); r_anal_esil_set_op(esil, "==", reil_cmp); r_anal_esil_set_op(esil, "<", reil_smaller); r_anal_esil_set_op(esil, ">", reil_larger); r_anal_esil_set_op(esil, "<=", reil_smaller_equal); r_anal_esil_set_op(esil, ">=", reil_larger_equal); r_anal_esil_set_op(esil, "[]", reil_peek); r_anal_esil_set_op(esil, "=[]", reil_poke); r_anal_esil_set_op(esil, "|=[]", reil_mem_oreq); r_anal_esil_set_op(esil, "^=[]", reil_mem_xoreq); r_anal_esil_set_op(esil, "&=[]", reil_mem_andeq); r_anal_esil_set_op(esil, "+=[]", reil_mem_addeq); r_anal_esil_set_op(esil, "-=[]", reil_mem_subeq); r_anal_esil_set_op(esil, "*=[]", reil_mem_muleq); r_anal_esil_set_op(esil, "++=[]", reil_mem_inceq); r_anal_esil_set_op(esil, "--=[]", reil_mem_deceq); r_anal_esil_set_op(esil, "=[1]", reil_poke1); r_anal_esil_set_op(esil, "=[2]", reil_poke2); r_anal_esil_set_op(esil, "=[4]", reil_poke4); r_anal_esil_set_op(esil, "=[8]", reil_poke8); r_anal_esil_set_op(esil, "[1]", reil_peek1); r_anal_esil_set_op(esil, "[2]", reil_peek2); r_anal_esil_set_op(esil, "[4]", reil_peek4); r_anal_esil_set_op(esil, "[8]", reil_peek8); r_anal_esil_set_op(esil, "|=[1]", reil_mem_oreq1); r_anal_esil_set_op(esil, "|=[2]", reil_mem_oreq2); r_anal_esil_set_op(esil, "|=[4]", reil_mem_oreq4); r_anal_esil_set_op(esil, "|=[8]", reil_mem_oreq8); r_anal_esil_set_op(esil, "^=[1]", reil_mem_xoreq1); r_anal_esil_set_op(esil, "^=[2]", reil_mem_xoreq2); r_anal_esil_set_op(esil, "^=[4]", reil_mem_xoreq4); r_anal_esil_set_op(esil, "^=[8]", reil_mem_xoreq8); r_anal_esil_set_op(esil, "&=[1]", reil_mem_andeq1); r_anal_esil_set_op(esil, "&=[2]", reil_mem_andeq2); r_anal_esil_set_op(esil, "&=[4]", reil_mem_andeq4); r_anal_esil_set_op(esil, "&=[8]", reil_mem_andeq8); r_anal_esil_set_op(esil, "+=[1]", reil_mem_addeq1); r_anal_esil_set_op(esil, "+=[2]", reil_mem_addeq2); r_anal_esil_set_op(esil, "+=[4]", reil_mem_addeq4); r_anal_esil_set_op(esil, "+=[8]", reil_mem_addeq8); r_anal_esil_set_op(esil, "-=[1]", reil_mem_subeq1); r_anal_esil_set_op(esil, "-=[2]", reil_mem_subeq2); r_anal_esil_set_op(esil, "-=[4]", reil_mem_subeq4); r_anal_esil_set_op(esil, "-=[8]", reil_mem_subeq8); r_anal_esil_set_op(esil, "*=[1]", reil_mem_muleq1); r_anal_esil_set_op(esil, "*=[2]", reil_mem_muleq2); r_anal_esil_set_op(esil, "*=[4]", reil_mem_muleq4); r_anal_esil_set_op(esil, "*=[8]", reil_mem_muleq8); r_anal_esil_set_op(esil, "++=[1]", reil_mem_inceq1); r_anal_esil_set_op(esil, "++=[2]", reil_mem_inceq2); r_anal_esil_set_op(esil, "++=[4]", reil_mem_inceq4); r_anal_esil_set_op(esil, "++=[8]", reil_mem_inceq8); r_anal_esil_set_op(esil, "--=[1]", reil_mem_deceq1); r_anal_esil_set_op(esil, "--=[2]", reil_mem_deceq2); r_anal_esil_set_op(esil, "--=[4]", reil_mem_deceq4); r_anal_esil_set_op(esil, "--=[8]", reil_mem_deceq8); r_anal_esil_set_op(esil, "?{", reil_if); r_anal_esil_set_op(esil, "}", reil_if_end); return true; }