46 static void print_encoded_bytes (
u16 s,
u16 o);
47 static void print_decoded_instruction (
void);
48 int parse_line (
char *
s,
int *ps,
int *n);
61 printf(
"%04x:%04x ",
M.x86.saved_cs,
M.x86.saved_ip);
62 print_encoded_bytes(
M.x86.saved_cs,
M.x86.saved_ip);
63 print_decoded_instruction();
80 printf(
"%04x:%04x ",
M.x86.saved_cs,
M.x86.saved_ip);
81 print_encoded_bytes(
M.x86.saved_cs,
M.x86.saved_ip);
82 print_decoded_instruction();
115 tregs.
x86.R_IP = off;
116 tregs.
x86.R_CS = seg;
119 tregs.
x86.enc_str_pos = 0;
120 tregs.
x86.enc_pos = 0;
133 for (i=0; i<n; i++) {
134 op1 = (*sys_rdb)(((
u32)
M.x86.R_CS<<4) + (
M.x86.R_IP++));
166 strcpy(
M.x86.decoded_buf+
M.x86.enc_str_pos,
x);
174 strcpy(
M.x86.decoded_buf+
M.x86.enc_str_pos,temp);
175 M.x86.enc_str_pos +=
strlen(temp);
180 M.x86.enc_str_pos = 0;
184 static void print_encoded_bytes (
u16 s,
u16 o)
188 for (i=0; i<
M.x86.enc_pos; i++) {
194 static void print_decoded_instruction (
void)
196 printf(
"%s",
M.x86.decoded_buf);
203 if (iv > 256)
return;
206 printf(
"%04x:%04x ", seg, off);
211 u32 start = off & 0xfffffff0;
212 u32 end = (off+16) & 0xfffffff0;
215 while (end <= off + amt) {
216 printf(
"%04x:%04x ", seg, start);
217 for (i=start; i< off; i++)
237 static int breakpoint;
238 static int noDecode = 1;
241 if (
M.x86.saved_ip != breakpoint) {
247 print_decoded_instruction ();
255 (
void)fgets(
s, 1023, stdin);
256 cmd = parse_line(
s, ps, &ntok);
263 segment =
M.x86.saved_cs;
267 }
else if (ntok == 3) {
273 segment =
M.x86.saved_cs;
304 M.x86.debug |= DEBUG_EXIT;
307 noDecode = (noDecode)?0:1;
308 printf(
"Toggled decoding to %s\n",(noDecode)?
"FALSE":
"TRUE");
329 int parse_line (
char *
s,
int *ps,
int *n)
335 while(*
s ==
' ' || *
s ==
'\t')
s++;
347 while (*
s !=
' ' && *
s !=
'\t' && *
s !=
'\n')
s++;
352 while(*
s ==
' ' || *
s ==
'\t')
s++;
354 sscanf(
s,
"%x",&ps[*n]);
366 printf(
"\tAX=%04x ",
M.x86.R_AX );
367 printf(
"BX=%04x ",
M.x86.R_BX );
368 printf(
"CX=%04x ",
M.x86.R_CX );
369 printf(
"DX=%04x ",
M.x86.R_DX );
370 printf(
"SP=%04x ",
M.x86.R_SP );
371 printf(
"BP=%04x ",
M.x86.R_BP );
372 printf(
"SI=%04x ",
M.x86.R_SI );
373 printf(
"DI=%04x\n",
M.x86.R_DI );
374 printf(
"\tDS=%04x ",
M.x86.R_DS );
375 printf(
"ES=%04x ",
M.x86.R_ES );
376 printf(
"SS=%04x ",
M.x86.R_SS );
377 printf(
"CS=%04x ",
M.x86.R_CS );
378 printf(
"IP=%04x ",
M.x86.R_IP );
400 printf(
"\tEAX=%08x ",
M.x86.R_EAX );
401 printf(
"EBX=%08x ",
M.x86.R_EBX );
402 printf(
"ECX=%08x ",
M.x86.R_ECX );
403 printf(
"EDX=%08x\n",
M.x86.R_EDX );
404 printf(
"\tESP=%08x ",
M.x86.R_ESP );
405 printf(
"EBP=%08x ",
M.x86.R_EBP );
406 printf(
"ESI=%08x ",
M.x86.R_ESI );
407 printf(
"EDI=%08x\n",
M.x86.R_EDI );
408 printf(
"\tDS=%04x ",
M.x86.R_DS );
409 printf(
"ES=%04x ",
M.x86.R_ES );
410 printf(
"SS=%04x ",
M.x86.R_SS );
411 printf(
"CS=%04x ",
M.x86.R_CS );
412 printf(
"EIP=%08x\n\t",
M.x86.R_EIP );
u16 fetch_data_word_abs(uint segment, uint offset)
u8 fetch_data_byte_abs(uint segment, uint offset)
void x86emu_dump_xregs(void)
void x86emu_dump_regs(void)
#define DEBUG_DECODE_NOPRINT()
void x86emu_end_instr(void)
void x86emu_inc_decoded_inst_len(int x)
void x86emu_check_data_access(uint s, uint o)
void x86emu_check_mem_access(u32 p)
void x86emu_single_step(void)
void x86emu_just_disassemble(void)
void x86emu_check_sp_access(void)
void x86emu_decode_printf(const char *x)
void disassemble_forward(u16 seg, u16 off, int n)
void x86emu_check_ip_access(void)
void x86emu_decode_printf2(const char *x, int y)
void x86emu_print_int_vect(u16 iv)
void(* x86emu_optab[256])(u8)
#define SYSMODE_PREFIX_DATA
#define SYSMODE_PREFIX_ADDR
#define ACCESS_FLAG(flag)
char * strcpy(char *dst, const char *src)
size_t strlen(const char *src)
#define s(param, src_bits, pmcreg, dst_bits)
int snprintf(char *buf, size_t size, const char *fmt,...)
Note: This file is only for POSIX compatibility, and is meant to be chain-included via string....
#define DEBUG_DECODE_NOPRINT_F
void X86EMU_trace_xregs(void)
#define DEBUG_TRACECALL_F
void X86EMU_trace_regs(void)
typedef void(X86APIP X86EMU_intrFuncs)(int num)
int X86EMU_trace_off(void)
void X86EMU_dump_memory(u16 seg, u16 off, u32 amt)
int X86EMU_trace_on(void)
#define DEBUG_DISASSEMBLE_F