Пример #1
0
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";
}
Пример #2
0
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;
}