示例#1
0
文件: system.c 项目: 111X/radare
int debug_reg(const char *arg)
{
	if (arg[0]) {
		if (arg[0]=='?') {
			eprintf("Usage: !reg[io][2][*] [reg [=value]]\n");
			eprintf("  !regio      : see !regio?\n");
			eprintf("  !reg        : list registers\n");
			eprintf("  !reg*       : list registers as radare commands\n");
			eprintf("  !reg2       : list extra registers\n");
			eprintf("  !reg2 eax   : get register value\n");
			eprintf("  !reg2 eax=3 : set register value\n");
		} else
		if (arg[0]=='2') {
			debug_registers(2);
		} else
		if ((arg[0]=='=') || (arg[0]=='s'&&arg[1]=='=')) {
			debug_register_list();
		} else
		if ((arg[0]=='s' && arg[1]=='*') || arg[0] == '*')
			debug_registers(1);
		else {
			if (arg[0]=='s' || strnull(arg))
				debug_registers(0);
			else {
				if (strchr(arg+1, '='))
					debug_set_register(arg+1);
				else debug_get_register(arg+1);
			}
		}
	} else debug_registers(0);
	return 0;
}
示例#2
0
文件: tinyvm.c 项目: kkestell/tinyvm
void cycle() {
  char op = 0;
  unsigned r0 = 0;
  unsigned r1 = 0;
  unsigned r2 = 0;
  unsigned im = 0;

  unsigned long long instr = fetch();

  printf("%08x %016llx ", pc, instr);

  /*
  0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
  ^^^^^^^^^ ^^^^^^^^^ ^^^^^^^^^ ^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    instr.     r0        r1        r2            immediate value
  */

  op = (instr & 0xFF00000000000000) >> 56;
  r0 = (instr & 0x00FF000000000000) >> 48;
  r1 = (instr & 0x0000FF0000000000) >> 40;
  r2 = (instr & 0x000000FF00000000) >> 32;
  im = (instr & 0x00000000FFFFFFFF);

  switch(op) {
    case 0x0: // halt
      running = false;
      break;
    case 0x1: // nop
      break;
    case 0x2: // li
      r[r0] = im;
      break;
    case 0x3: // lw
      r[r0] = ram[r[r1]];
      break;
    case 0x4: // sw
      ram[r[r1]] = r[r0];
      break;
    case 0x5: // add
      r[r0] = r[r1] + r[r2];
      break;
    case 0x6: // sub
      r[r0] = r[r1] - r[r2];
      break;
    case 0x7: // mult
      r[r0] = r[r1] * r[r2];
      break;
    case 0x8: // div
      r[r0] = r[r1] / r[r2];
      break;
    case 0x9: // j
      pc = im;
      break;
    case 0xA: // jr
      pc = r[r0];
      break;
    case 0xB: // beq
      if(r[r0] == r[r1]) pc = r[r2];
      break;
    case 0xC: // bne
      if(r[r0] != r[r1]) pc = r[r2];
      break;
    case 0xD: // inc
      r[r0]++;
      break;
    case 0xE: // dec
      r[r0]--;
      break;
  }

  debug_registers();
}