📄 i386.c
字号:
#include <dfs.h>#include <stdio.h>#include <string.h>#include <stdlib.h>#include <ctype.h>#include <time.h>#include <conio.h>#include <advanced.h>#include <debugapi.h>#include <process.h>#include <errno.h>#include "i386.h"extern char *mem2hex (void *mem, char *buf, int count, int may_fault);extern char *hex2mem (char *buf, void *mem, int count, int may_fault);extern int computeSignal (int exceptionVector);voidflush_i_cache (void){}/* Get the registers out of the frame information. */voidframe_to_registers (struct StackFrame *frame, char *regs){ /* Copy EAX -> EDI */ mem2hex (&frame->ExceptionEAX, ®s[0 * 4 * 2], 4 * 8, 0); /* Copy EIP & PS */ mem2hex (&frame->ExceptionPC, ®s[8 * 4 * 2], 4 * 2, 0); /* Copy CS, SS, DS */ mem2hex (&frame->ExceptionCS, ®s[10 * 4 * 2], 4 * 3, 0); /* Copy ES */ mem2hex (&frame->ExceptionES, ®s[13 * 4 * 2], 4 * 1, 0); /* Copy FS & GS */ mem2hex (&frame->ExceptionFS, ®s[14 * 4 * 2], 4 * 2, 0);}/* Put the registers back into the frame information. */voidregisters_to_frame (char *regs, struct StackFrame *frame){ /* Copy EAX -> EDI */ hex2mem (®s[0 * 4 * 2], &frame->ExceptionEAX, 4 * 8, 0); /* Copy EIP & PS */ hex2mem (®s[8 * 4 * 2], &frame->ExceptionPC, 4 * 2, 0); /* Copy CS, SS, DS */ hex2mem (®s[10 * 4 * 2], &frame->ExceptionCS, 4 * 3, 0); /* Copy ES */ hex2mem (®s[13 * 4 * 2], &frame->ExceptionES, 4 * 1, 0); /* Copy FS & GS */ hex2mem (®s[14 * 4 * 2], &frame->ExceptionFS, 4 * 2, 0);}voidset_step_traps (struct StackFrame *frame){ frame->ExceptionSystemFlags |= 0x100;}voidclear_step_traps (struct StackFrame *frame){ frame->ExceptionSystemFlags &= ~0x100;}voiddo_status (char *ptr, struct StackFrame *frame){ int sigval; sigval = computeSignal (frame->ExceptionNumber); sprintf (ptr, "T%02x", sigval); ptr += 3; sprintf (ptr, "%02x:", PC_REGNUM); ptr = mem2hex (&frame->ExceptionPC, ptr + 3, 4, 0); *ptr++ = ';'; sprintf (ptr, "%02x:", SP_REGNUM); ptr = mem2hex (&frame->ExceptionESP, ptr + 3, 4, 0); *ptr++ = ';'; sprintf (ptr, "%02x:", DEPRECATED_FP_REGNUM); ptr = mem2hex (&frame->ExceptionEBP, ptr + 3, 4, 0); *ptr++ = ';'; *ptr = '\000';}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -