Merged in Dreg_fr33project/titanengine-update (pull request #6)

Basic FPU support
This commit is contained in:
mrexodia 2014-11-02 02:08:54 +01:00
commit b421e7e00e
5 changed files with 617 additions and 185 deletions

View File

@ -253,6 +253,51 @@
#define UE_SEG_DS 40 #define UE_SEG_DS 40
#define UE_SEG_CS 41 #define UE_SEG_CS 41
#define UE_SEG_SS 42 #define UE_SEG_SS 42
#define UE_x87_r0 43
#define UE_x87_r1 44
#define UE_x87_r2 45
#define UE_x87_r3 46
#define UE_x87_r4 47
#define UE_x87_r5 48
#define UE_x87_r6 49
#define UE_x87_r7 50
#define UE_X87_STATUSWORD 51
#define UE_X87_CONTROLWORD 52
#define UE_X87_TAGWORD 53
#define UE_MXCSR 54
#define UE_MMX0 55
#define UE_MMX1 56
#define UE_MMX2 57
#define UE_MMX3 58
#define UE_MMX4 59
#define UE_MMX5 60
#define UE_MMX6 61
#define UE_MMX7 62
#define UE_XMM0 63
#define UE_XMM1 64
#define UE_XMM2 65
#define UE_XMM3 66
#define UE_XMM4 67
#define UE_XMM5 68
#define UE_XMM6 69
#define UE_XMM7 70
#define UE_XMM8 71
#define UE_XMM9 72
#define UE_XMM10 73
#define UE_XMM11 74
#define UE_XMM12 75
#define UE_XMM13 76
#define UE_XMM14 77
#define UE_XMM15 78
#define UE_x87_ST0 79
#define UE_x87_ST1 80
#define UE_x87_ST2 81
#define UE_x87_ST3 82
#define UE_x87_ST4 83
#define UE_x87_ST5 84
#define UE_x87_ST6 85
#define UE_x87_ST7 86
#ifndef CONTEXT_EXTENDED_REGISTERS #ifndef CONTEXT_EXTENDED_REGISTERS
#define CONTEXT_EXTENDED_REGISTERS 0 #define CONTEXT_EXTENDED_REGISTERS 0
@ -262,18 +307,18 @@ typedef struct
{ {
BYTE data[10]; BYTE data[10];
int st_value; int st_value;
int tag;
} x87FPURegister_t; } x87FPURegister_t;
typedef struct typedef struct
{ {
DWORD ControlWord; WORD ControlWord;
DWORD StatusWord; WORD StatusWord;
DWORD TagWord; WORD TagWord;
DWORD ErrorOffset; DWORD ErrorOffset;
DWORD ErrorSelector; DWORD ErrorSelector;
DWORD DataOffset; DWORD DataOffset;
DWORD DataSelector; DWORD DataSelector;
x87FPURegister_t x87FPURegister[8];
DWORD Cr0NpxState; DWORD Cr0NpxState;
} x87FPU_t; } x87FPU_t;
@ -314,7 +359,6 @@ typedef struct
BYTE RegisterArea[80]; BYTE RegisterArea[80];
x87FPU_t x87fpu; x87FPU_t x87fpu;
DWORD MxCsr; DWORD MxCsr;
uint64_t mmx[8];
#ifdef _WIN64 #ifdef _WIN64
M128A XmmRegisters[16]; M128A XmmRegisters[16];
#else // x86 #else // x86
@ -765,6 +809,8 @@ __declspec(dllexport) bool TITCALL SetMemoryBPX(ULONG_PTR MemoryStart, SIZE_T Si
__declspec(dllexport) bool TITCALL SetMemoryBPXEx(ULONG_PTR MemoryStart, SIZE_T SizeOfMemory, DWORD BreakPointType, bool RestoreOnHit, LPVOID bpxCallBack); __declspec(dllexport) bool TITCALL SetMemoryBPXEx(ULONG_PTR MemoryStart, SIZE_T SizeOfMemory, DWORD BreakPointType, bool RestoreOnHit, LPVOID bpxCallBack);
__declspec(dllexport) bool TITCALL RemoveMemoryBPX(ULONG_PTR MemoryStart, SIZE_T SizeOfMemory); __declspec(dllexport) bool TITCALL RemoveMemoryBPX(ULONG_PTR MemoryStart, SIZE_T SizeOfMemory);
__declspec(dllexport) bool TITCALL GetContextFPUDataEx(HANDLE hActiveThread, void* FPUSaveArea); __declspec(dllexport) bool TITCALL GetContextFPUDataEx(HANDLE hActiveThread, void* FPUSaveArea);
__declspec(dllexport) void TITCALL Getx87FPURegisters(x87FPURegister_t x87FPURegisters[8], TITAN_ENGINE_CONTEXT_t* titcontext);
__declspec(dllexport) void TITCALL GetMMXRegisters(uint64_t mmx[8], TITAN_ENGINE_CONTEXT_t* titcontext);
__declspec(dllexport) bool TITCALL GetFullContextDataEx(HANDLE hActiveThread, TITAN_ENGINE_CONTEXT_t* titcontext); __declspec(dllexport) bool TITCALL GetFullContextDataEx(HANDLE hActiveThread, TITAN_ENGINE_CONTEXT_t* titcontext);
__declspec(dllexport) ULONG_PTR TITCALL GetContextDataEx(HANDLE hActiveThread, DWORD IndexOfRegister); __declspec(dllexport) ULONG_PTR TITCALL GetContextDataEx(HANDLE hActiveThread, DWORD IndexOfRegister);
__declspec(dllexport) ULONG_PTR TITCALL GetContextData(DWORD IndexOfRegister); __declspec(dllexport) ULONG_PTR TITCALL GetContextData(DWORD IndexOfRegister);

View File

@ -1,6 +1,12 @@
#ifndef _GLOBAL_ENGINE_THREADING_H #ifndef _GLOBAL_ENGINE_THREADING_H
#define _GLOBAL_ENGINE_THREADING_H #define _GLOBAL_ENGINE_THREADING_H
#define GetSTInTOPStackFromStatusWord(StatusWord) ((StatusWord & 0x3800) >> 11)
#define Getx87r0PositionInRegisterArea(STInTopStack) ((8 - STInTopStack) % 8)
#define Calculatex87registerPositionInRegisterArea(x87r0_position, index) (((x87r0_position + index) % 8))
#define GetRegisterAreaOf87register(register_area, x87r0_position, index) (((char *) register_area) + 10 * Calculatex87registerPositionInRegisterArea(x87r0_position, index) )
#define GetSTValueFromIndex(x87r0_position, index) ((x87r0_position + index) % 8)
enum CriticalSectionLock enum CriticalSectionLock
{ {
LockBreakPointBuffer, LockBreakPointBuffer,

File diff suppressed because it is too large Load Diff

View File

@ -180,6 +180,8 @@ __declspec(dllexport) bool TITCALL SetMemoryBPXEx(ULONG_PTR MemoryStart, SIZE_T
__declspec(dllexport) bool TITCALL RemoveMemoryBPX(ULONG_PTR MemoryStart, SIZE_T SizeOfMemory); __declspec(dllexport) bool TITCALL RemoveMemoryBPX(ULONG_PTR MemoryStart, SIZE_T SizeOfMemory);
__declspec(dllexport) bool TITCALL GetContextFPUDataEx(HANDLE hActiveThread, void* FPUSaveArea); __declspec(dllexport) bool TITCALL GetContextFPUDataEx(HANDLE hActiveThread, void* FPUSaveArea);
__declspec(dllexport) bool TITCALL GetFullContextDataEx(HANDLE hActiveThread, TITAN_ENGINE_CONTEXT_t* titcontext); __declspec(dllexport) bool TITCALL GetFullContextDataEx(HANDLE hActiveThread, TITAN_ENGINE_CONTEXT_t* titcontext);
__declspec(dllexport) void TITCALL Getx87FPURegisters(x87FPURegister_t x87FPURegisters[8], TITAN_ENGINE_CONTEXT_t* titcontext);
__declspec(dllexport) void TITCALL GetMMXRegisters(uint64_t mmx[8], TITAN_ENGINE_CONTEXT_t* titcontext);
__declspec(dllexport) ULONG_PTR TITCALL GetContextDataEx(HANDLE hActiveThread, DWORD IndexOfRegister); __declspec(dllexport) ULONG_PTR TITCALL GetContextDataEx(HANDLE hActiveThread, DWORD IndexOfRegister);
__declspec(dllexport) ULONG_PTR TITCALL GetContextData(DWORD IndexOfRegister); __declspec(dllexport) ULONG_PTR TITCALL GetContextData(DWORD IndexOfRegister);
__declspec(dllexport) bool TITCALL SetContextFPUDataEx(HANDLE hActiveThread, void* FPUSaveArea); __declspec(dllexport) bool TITCALL SetContextFPUDataEx(HANDLE hActiveThread, void* FPUSaveArea);

View File

@ -94,18 +94,18 @@ typedef struct
{ {
BYTE data[10]; BYTE data[10];
int st_value; int st_value;
int tag;
} x87FPURegister_t; } x87FPURegister_t;
typedef struct typedef struct
{ {
DWORD ControlWord; WORD ControlWord;
DWORD StatusWord; WORD StatusWord;
DWORD TagWord; WORD TagWord;
DWORD ErrorOffset; DWORD ErrorOffset;
DWORD ErrorSelector; DWORD ErrorSelector;
DWORD DataOffset; DWORD DataOffset;
DWORD DataSelector; DWORD DataSelector;
x87FPURegister_t x87FPURegister[8];
DWORD Cr0NpxState; DWORD Cr0NpxState;
} x87FPU_t; } x87FPU_t;
@ -146,7 +146,6 @@ typedef struct
BYTE RegisterArea[80]; BYTE RegisterArea[80];
x87FPU_t x87fpu; x87FPU_t x87fpu;
DWORD MxCsr; DWORD MxCsr;
uint64_t mmx[8];
#ifdef _WIN64 #ifdef _WIN64
M128A XmmRegisters[16]; M128A XmmRegisters[16];
#else // x86 #else // x86
@ -620,6 +619,50 @@ typedef struct
#define UE_SEG_DS 40 #define UE_SEG_DS 40
#define UE_SEG_CS 41 #define UE_SEG_CS 41
#define UE_SEG_SS 42 #define UE_SEG_SS 42
#define UE_x87_r0 43
#define UE_x87_r1 44
#define UE_x87_r2 45
#define UE_x87_r3 46
#define UE_x87_r4 47
#define UE_x87_r5 48
#define UE_x87_r6 49
#define UE_x87_r7 50
#define UE_X87_STATUSWORD 51
#define UE_X87_CONTROLWORD 52
#define UE_X87_TAGWORD 53
#define UE_MXCSR 54
#define UE_MMX0 55
#define UE_MMX1 56
#define UE_MMX2 57
#define UE_MMX3 58
#define UE_MMX4 59
#define UE_MMX5 60
#define UE_MMX6 61
#define UE_MMX7 62
#define UE_XMM0 63
#define UE_XMM1 64
#define UE_XMM2 65
#define UE_XMM3 66
#define UE_XMM4 67
#define UE_XMM5 68
#define UE_XMM6 69
#define UE_XMM7 70
#define UE_XMM8 71
#define UE_XMM9 72
#define UE_XMM10 73
#define UE_XMM11 74
#define UE_XMM12 75
#define UE_XMM13 76
#define UE_XMM14 77
#define UE_XMM15 78
#define UE_x87_ST0 79
#define UE_x87_ST1 80
#define UE_x87_ST2 81
#define UE_x87_ST3 82
#define UE_x87_ST4 83
#define UE_x87_ST5 84
#define UE_x87_ST6 85
#define UE_x87_ST7 86
typedef struct typedef struct
{ {