Beispiel #1
0
int armice_thumb_codelet_test(armice_ctrl_t * ctrl, FILE * f)
{
	armice_codelet_t * cl = &codelet_step_thumb;
	struct armice_context ct0;
	struct armice_context ct1;
	int dbg_status;
	uint32_t addr = ctrl->work_addr;
	uint32_t reg[16];
	int ret;

	fprintf(f, " == THUMB CODELET TEST ==\n");

	if (test_save_context(f, ctrl, &ct0) < 0)
		return -1;

	fprintf(f, "- Loading codelet: %p, size:%d ...\n", cl, cl->size);

	if ((ret = armice_code_load(ctrl, addr, cl->code, cl->size)) < 0) { 
		fprintf(f, "# Error: arm7ice_code_load()!\n");
		return ret;
	}

	reg[0] = 0x0000;
	reg[1] = 0x11111111;
	reg[2] = 0x22222222;
	reg[3] = 0x33333333;
	reg[4] = 0x44444444;
	reg[5] = 0x55555555;
	reg[6] = 0x66666666;
	reg[7] = 0x77777777;
	reg[8] = 0x88888888;
	reg[9] = 0x99999999;
	reg[10] = 0x10101010;
	reg[11] = 0x11111111;
	reg[12] = 0x12121212;

	if ((ret = armice_code_exec(ctrl, addr, reg, 13)) < 0) { 
		fprintf(f, "# Error: armice_code_exec()!\n");
		return ret;
	}

	if ((dbg_status = ctrl->jtag_arm_dbg_status(ctrl->tap)) < 0) {
		DCC_LOG1(LOG_ERROR, "arm7ice_get_status(): %d", dbg_status);
		return dbg_status;
	}

	if ((dbg_status & ARMICE_ST_DBGACK) != 0) {
		fprintf(f, "# Core is stopped!!!!!!!\n");
	}

	fprintf(f, " - Wait 50 ms...\n");
	uthread_sleep(50);

	armice_code_stop(ctrl);

	if (test_save_context(f, ctrl, &ct0) < 0)
		return -1;
	arm_show_cpsr(f, ct0.cpsr);
	arm_show_regs(f, ct0.r);

	fprintf(f, " - TARGET context, before step:\n");
	arm_show_cpsr(f, ct0.cpsr);
	arm_show_regs(f, ct0.r);
	show_insn(f, ctrl, &ct0);

	fprintf(f, " - Step @ 0x%08x:\n", addr);

	if (ct0.cpsr & ARM_STATE_THUMB) {
		fprintf(f, " - THUMB step ...\n");
		if ((ret = ctrl->thumb_insn_step(ctrl->tap, &ct0)) < 0) {
			fprintf(f, "# THUMB step error!!!!\n");
			return -1;
		}
	} else {
		fprintf(f, " - ARM step ...\n");
		if ((ret = ctrl->arm_insn_step(ctrl->tap, &ct0)) < 0) {
			fprintf(f, "# ARM step error!!!!\n");
			return -1;
		}
	}

	if (test_save_context(f, ctrl, &ct1) < 0)
		return -1;

	fprintf(f, " - TARGET context, after step:\n");
	arm_show_cpsr(f, ct1.cpsr);
	arm_show_regs(f, ct1.r);
	show_insn(f, ctrl, &ct1);

	return 0;
}
Beispiel #2
0
std::string show(const IRInstruction* insn) {
  return show_insn(insn, false);
}
Beispiel #3
0
int armice_codelet_test(armice_ctrl_t * ctrl, FILE * f)
{
	armice_codelet_t * cl = &codelet_step2;
	struct armice_context ct0;
	struct armice_context ct1;
	int dbg_status;
	uint32_t addr = ctrl->work_addr;
	uint32_t reg[16];
	int ret;
	int i;

	fprintf(f, " == ARM CODELET TEST ==\n");

	fprintf(f, " - Loading codelet @ addr:0x%08x, size:%d ...\n", 
			addr, cl->size);

	if ((ret = armice_code_load(ctrl, addr, cl->code, cl->size)) < 0) { 
		fprintf(f, "# Error: arm7ice_code_load()!\n");
		return ret;
	}

	for (i = 0; i < 12; i++) {
		ct0.r[i] = 0xf0000000 + i;
	}
	ct0.sp = 0xdddd0000;
	ct0.lr = 0xeeee0000;
	ct0.pc = 0xffff0000;
	ct0.cpsr = ARM_MODE_SYSTEM | ARM_DISABLE_IRQ | ARM_DISABLE_FIQ;

	fprintf(f, " - Installing a fresh ARM context >>> >>>\n");
	ctrl->arm_context_restore(ctrl->tap,  &ct0);

	reg[0] = 0x00000000;
	reg[1] = 0x11111111;
	reg[2] = 0x22222222;
	reg[3] = 0x33333333;
	reg[4] = 0x44444444;
	reg[5] = 0x55555555;
	reg[6] = 0x66666666;
	reg[7] = 0x77777777;
	reg[8] = 0x88888888;
	reg[9] = 0x99999999;
	reg[10] = 0x10101010;
	reg[11] = 0x11111111;
	reg[12] = 0x12121212;
	reg[12] = 0x13131313;


	if ((ret = armice_code_exec(ctrl, addr, reg, 13)) < 0) { 
		fprintf(f, " # ERROR: armice_code_exec()!\n");
		return ret;
	}

	if ((dbg_status = ctrl->jtag_arm_dbg_status(ctrl->tap)) < 0) {
		DCC_LOG1(LOG_ERROR, "arm7ice_get_status(): %d", dbg_status);
		return dbg_status;
	}

	if ((dbg_status & ARMICE_ST_DBGACK) != 0) {
		fprintf(f, " # ERROR: Core is stopped!!!!!!!\n");
	}

	fprintf(f, " - Wait 10 ms...\n");
	uthread_sleep(10);

	armice_code_stop(ctrl);

	if ((dbg_status = test_save_context(f, ctrl, &ct0)) < 0)
		return -1;

	if (dbg_status & ARMICE_ST_TBIT) {
		fprintf(f, " #ERROR: THUMB state!!\n");
		return -1;
	}

	fprintf(f, " - TARGET context, before step:\n");
	arm_show_cpsr(f, ct0.cpsr);
	arm_show_regs(f, ct0.r);
	show_insn(f, ctrl, &ct0);

	fprintf(f, " - Step @ 0x%08x:\n", addr);

	fprintf(f, " - ARM step ...\n");
	if ((ret = ctrl->arm_insn_step(ctrl->tap, &ct0)) < 0) {
		fprintf(f, "# ARM step error!!!!\n");
		return -1;
	}

	if ((dbg_status = test_save_context(f, ctrl, &ct1)) < 0)
		return -1;

	fprintf(f, " - TARGET context, after step:\n");
	arm_show_cpsr(f, ct1.cpsr);
	arm_show_regs(f, ct1.r);
	show_insn(f, ctrl, &ct1);

	return 0;
}
Beispiel #4
0
std::string show_deobfuscated(const IRInstruction* insn) {
  return show_insn(insn, true);
}