mirror of https://github.com/x64dbg/TitanEngine
Merged in Dreg_fr33project/titanengine-update (pull request #6)
Basic FPU support
This commit is contained in:
commit
b421e7e00e
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -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
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue