Exemplo n.º 1
0
Arquivo: debug.c Projeto: KDE/kcmgrub2
/* should look something like debug's output. */
void X86EMU_trace_regs (void)
{
return;
	if (DEBUG_TRACE()) {
		x86emu_dump_regs();
    }
	if (DEBUG_DECODE() && ! DEBUG_DECODE_NOPRINT()) {
		printf("%04x:%04x ",M.x86.saved_cs, M.x86.saved_ip);
		print_encoded_bytes( M.x86.saved_cs, M.x86.saved_ip);
		print_decoded_instruction();
    }
		printf("%04x:%04x \n",M.x86.saved_cs, M.x86.saved_ip);
		print_encoded_bytes( M.x86.saved_cs, M.x86.saved_ip);
		print_decoded_instruction();
}
Exemplo n.º 2
0
void x86emu_just_disassemble (void)
{
    /*
     * This routine called if the flag DEBUG_DISASSEMBLE is set kind
     * of a hack!
     */
	printk("%04x:%04x ",M.x86.saved_cs, M.x86.saved_ip);
	print_encoded_bytes( M.x86.saved_cs, M.x86.saved_ip);
	print_decoded_instruction();
}
Exemplo n.º 3
0
void x86emu_single_step (void)
{
    char s[1024];
    int ps[10];
    int ntok;
    int cmd;
    int done;
		int segment;
    int offset;
    static int breakpoint;
    static int noDecode = 1;
    
    char *p;

		if (DEBUG_BREAK()) {
				if (M.x86.saved_ip != breakpoint) {
						return;
				} else {
 	          M.x86.debug &= ~DEBUG_DECODE_NOPRINT_F;
						M.x86.debug |= DEBUG_TRACE_F;
						M.x86.debug &= ~DEBUG_BREAK_F;
						print_decoded_instruction ();
						X86EMU_trace_regs();
				}
		}
    done=0;
	offset = M.x86.saved_ip;
    while (!done) {
        printk("-");
        p = fgets(s, 1023, stdin);
        cmd = parse_line(s, ps, &ntok);
        switch(cmd) {
          case 'u':
			disassemble_forward(M.x86.saved_cs,(u16)offset,10);
            break;
          case 'd':  
							if (ntok == 2) {
									segment = M.x86.saved_cs;
									offset = ps[1];
									X86EMU_dump_memory(segment,(u16)offset,16);
									offset += 16;
							} else if (ntok == 3) {
									segment = ps[1];
									offset = ps[2];
									X86EMU_dump_memory(segment,(u16)offset,16);
									offset += 16;
							} else {
									segment = M.x86.saved_cs;
									X86EMU_dump_memory(segment,(u16)offset,16);
									offset += 16;
							}
            break;
          case 'c':
			M.x86.debug ^= DEBUG_TRACECALL_F;
            break;
          case 's':
			M.x86.debug ^= DEBUG_SVC_F | DEBUG_SYS_F | DEBUG_SYSINT_F;
            break;
          case 'r':
			X86EMU_trace_regs();
            break;
          case 'x':
			X86EMU_trace_xregs();
            break;
          case 'g':
            if (ntok == 2) {
                breakpoint = ps[1];
		if (noDecode) {
		                M.x86.debug |= DEBUG_DECODE_NOPRINT_F;
		} else {
		                M.x86.debug &= ~DEBUG_DECODE_NOPRINT_F;
		}
		M.x86.debug &= ~DEBUG_TRACE_F;
		M.x86.debug |= DEBUG_BREAK_F;
		done = 1;
            }
            break;
          case 'q':
          M.x86.debug |= DEBUG_EXIT;
          return;
	  case 'P':
	      noDecode = (noDecode)?0:1;
	      printk("Toggled decoding to %s\n",(noDecode)?"FALSE":"TRUE");
	      break;
          case 't':
	  case 0:
            done = 1;
            break;
        }   
    }
}