1 #include <dfs.h> 2 #include <stdio.h> 3 #include <string.h> 4 #include <stdlib.h> 5 #include <ctype.h> 6 #include <time.h> 7 #include <conio.h> 8 #include <advanced.h> 9 #include <debugapi.h> 10 #include <process.h> 11 #include <errno.h> 12 #include "i386.h" 13 14 extern char *mem2hex (void *mem, char *buf, int count, int may_fault); 15 extern char *hex2mem (char *buf, void *mem, int count, int may_fault); 16 extern int computeSignal (int exceptionVector); 17 18 void 19 flush_i_cache() 20 { 21 } 22 23 /* Get the registers out of the frame information. */ 24 25 void 26 frame_to_registers (frame, regs) 27 struct StackFrame *frame; 28 char *regs; 29 { 30 /* Copy EAX -> EDI */ 31 mem2hex (&frame->ExceptionEAX, ®s[0 * 4 * 2], 4 * 8, 0); 32 33 /* Copy EIP & PS */ 34 mem2hex (&frame->ExceptionPC, ®s[8 * 4 * 2], 4 * 2, 0); 35 36 /* Copy CS, SS, DS */ 37 mem2hex (&frame->ExceptionCS, ®s[10 * 4 * 2], 4 * 3, 0); 38 39 /* Copy ES */ 40 mem2hex (&frame->ExceptionES, ®s[13 * 4 * 2], 4 * 1, 0); 41 42 /* Copy FS & GS */ 43 mem2hex (&frame->ExceptionFS, ®s[14 * 4 * 2], 4 * 2, 0); 44 } 45 46 /* Put the registers back into the frame information. */ 47 48 void 49 registers_to_frame (regs, frame) 50 char *regs; 51 struct StackFrame *frame; 52 { 53 /* Copy EAX -> EDI */ 54 hex2mem (®s[0 * 4 * 2], &frame->ExceptionEAX, 4 * 8, 0); 55 56 /* Copy EIP & PS */ 57 hex2mem (®s[8 * 4 * 2], &frame->ExceptionPC, 4 * 2, 0); 58 59 /* Copy CS, SS, DS */ 60 hex2mem (®s[10 * 4 * 2], &frame->ExceptionCS, 4 * 3, 0); 61 62 /* Copy ES */ 63 hex2mem (®s[13 * 4 * 2], &frame->ExceptionES, 4 * 1, 0); 64 65 /* Copy FS & GS */ 66 hex2mem (®s[14 * 4 * 2], &frame->ExceptionFS, 4 * 2, 0); 67 } 68 69 void 70 set_step_traps (frame) 71 struct StackFrame *frame; 72 { 73 frame->ExceptionSystemFlags |= 0x100; 74 } 75 76 void 77 clear_step_traps (frame) 78 struct StackFrame *frame; 79 { 80 frame->ExceptionSystemFlags &= ~0x100; 81 } 82 83 void 84 do_status (ptr, frame) 85 char *ptr; 86 struct StackFrame *frame; 87 { 88 int sigval; 89 90 sigval = computeSignal (frame->ExceptionNumber); 91 92 sprintf (ptr, "T%02x", sigval); 93 ptr += 3; 94 95 sprintf (ptr, "%02x:", PC_REGNUM); 96 ptr = mem2hex (&frame->ExceptionPC, ptr + 3, 4, 0); 97 *ptr++ = ';'; 98 99 sprintf (ptr, "%02x:", SP_REGNUM); 100 ptr = mem2hex (&frame->ExceptionESP, ptr + 3, 4, 0); 101 *ptr++ = ';'; 102 103 sprintf (ptr, "%02x:", FP_REGNUM); 104 ptr = mem2hex (&frame->ExceptionEBP, ptr + 3, 4, 0); 105 *ptr++ = ';'; 106 107 *ptr = '\000'; 108 } 109