mirror of https://github.com/x64dbg/TitanEngine
last fpu changes - ended basic first version
This commit is contained in:
parent
650bb5a46b
commit
71b5f65fbc
|
|
@ -4,7 +4,7 @@
|
|||
#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, i) )
|
||||
#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
|
||||
|
|
|
|||
|
|
@ -910,35 +910,91 @@ __declspec(dllexport) bool TITCALL SetContextDataEx(HANDLE hActiveThread, DWORD
|
|||
}
|
||||
else if(IndexOfRegister == UE_MMX0)
|
||||
{
|
||||
memcpy(&(titcontext.RegisterArea[0 * 10]), (void*) NewRegisterValue, 10);
|
||||
memcpy(&(titcontext.RegisterArea[0 * 10]), (void*) NewRegisterValue, 8);
|
||||
}
|
||||
else if(IndexOfRegister == UE_MMX1)
|
||||
{
|
||||
memcpy(&(titcontext.RegisterArea[1 * 10]), (void*) NewRegisterValue, 10);
|
||||
memcpy(&(titcontext.RegisterArea[1 * 10]), (void*) NewRegisterValue, 8);
|
||||
}
|
||||
else if(IndexOfRegister == UE_MMX2)
|
||||
{
|
||||
memcpy(&(titcontext.RegisterArea[2 * 10]), (void*) NewRegisterValue, 10);
|
||||
memcpy(&(titcontext.RegisterArea[2 * 10]), (void*) NewRegisterValue, 8);
|
||||
}
|
||||
else if(IndexOfRegister == UE_MMX3)
|
||||
{
|
||||
memcpy(&(titcontext.RegisterArea[3 * 10]), (void*) NewRegisterValue, 10);
|
||||
memcpy(&(titcontext.RegisterArea[3 * 10]), (void*) NewRegisterValue, 8);
|
||||
}
|
||||
else if(IndexOfRegister == UE_MMX4)
|
||||
{
|
||||
memcpy(&(titcontext.RegisterArea[4 * 10]), (void*) NewRegisterValue, 10);
|
||||
memcpy(&(titcontext.RegisterArea[4 * 10]), (void*) NewRegisterValue, 8);
|
||||
}
|
||||
else if(IndexOfRegister == UE_MMX5)
|
||||
{
|
||||
memcpy(&(titcontext.RegisterArea[5 * 10]), (void*) NewRegisterValue, 10);
|
||||
memcpy(&(titcontext.RegisterArea[5 * 10]), (void*) NewRegisterValue, 8);
|
||||
}
|
||||
else if(IndexOfRegister == UE_MMX6)
|
||||
{
|
||||
memcpy(&(titcontext.RegisterArea[0 * 10]), (void*) NewRegisterValue, 10);
|
||||
memcpy(&(titcontext.RegisterArea[0 * 10]), (void*) NewRegisterValue, 8);
|
||||
}
|
||||
else if(IndexOfRegister == UE_MMX7)
|
||||
{
|
||||
memcpy(&(titcontext.RegisterArea[0 * 10]), (void*) NewRegisterValue, 10);
|
||||
memcpy(&(titcontext.RegisterArea[0 * 10]), (void*) NewRegisterValue, 8);
|
||||
}
|
||||
else if(IndexOfRegister == UE_x87_r0)
|
||||
{
|
||||
int STInTopStack = GetSTInTOPStackFromStatusWord(titcontext.x87fpu.StatusWord);
|
||||
DWORD x87r0_position = Getx87r0PositionInRegisterArea(STInTopStack);
|
||||
|
||||
memcpy(((uint64_t*) GetRegisterAreaOf87register(titcontext.RegisterArea, x87r0_position, 0)), (char*) NewRegisterValue, 10);
|
||||
}
|
||||
else if(IndexOfRegister == UE_x87_r1)
|
||||
{
|
||||
int STInTopStack = GetSTInTOPStackFromStatusWord(titcontext.x87fpu.StatusWord);
|
||||
DWORD x87r0_position = Getx87r0PositionInRegisterArea(STInTopStack);
|
||||
|
||||
memcpy(((uint64_t*) GetRegisterAreaOf87register(titcontext.RegisterArea, x87r0_position, 1)), (char*) NewRegisterValue, 10);
|
||||
}
|
||||
else if(IndexOfRegister == UE_x87_r2)
|
||||
{
|
||||
int STInTopStack = GetSTInTOPStackFromStatusWord(titcontext.x87fpu.StatusWord);
|
||||
DWORD x87r0_position = Getx87r0PositionInRegisterArea(STInTopStack);
|
||||
|
||||
memcpy(((uint64_t*) GetRegisterAreaOf87register(titcontext.RegisterArea, x87r0_position, 2)), (char*) NewRegisterValue, 10);
|
||||
}
|
||||
else if(IndexOfRegister == UE_x87_r3)
|
||||
{
|
||||
int STInTopStack = GetSTInTOPStackFromStatusWord(titcontext.x87fpu.StatusWord);
|
||||
DWORD x87r0_position = Getx87r0PositionInRegisterArea(STInTopStack);
|
||||
|
||||
memcpy(((uint64_t*) GetRegisterAreaOf87register(titcontext.RegisterArea, x87r0_position, 3)), (char*) NewRegisterValue, 10);
|
||||
}
|
||||
else if(IndexOfRegister == UE_x87_r4)
|
||||
{
|
||||
int STInTopStack = GetSTInTOPStackFromStatusWord(titcontext.x87fpu.StatusWord);
|
||||
DWORD x87r0_position = Getx87r0PositionInRegisterArea(STInTopStack);
|
||||
|
||||
memcpy(((uint64_t*) GetRegisterAreaOf87register(titcontext.RegisterArea, x87r0_position, 4)), (char*) NewRegisterValue, 10);
|
||||
}
|
||||
else if(IndexOfRegister == UE_x87_r5)
|
||||
{
|
||||
int STInTopStack = GetSTInTOPStackFromStatusWord(titcontext.x87fpu.StatusWord);
|
||||
DWORD x87r0_position = Getx87r0PositionInRegisterArea(STInTopStack);
|
||||
|
||||
memcpy(((uint64_t*) GetRegisterAreaOf87register(titcontext.RegisterArea, x87r0_position, 5)), (char*) NewRegisterValue, 10);
|
||||
}
|
||||
else if(IndexOfRegister == UE_x87_r6)
|
||||
{
|
||||
int STInTopStack = GetSTInTOPStackFromStatusWord(titcontext.x87fpu.StatusWord);
|
||||
DWORD x87r0_position = Getx87r0PositionInRegisterArea(STInTopStack);
|
||||
|
||||
memcpy(((uint64_t*) GetRegisterAreaOf87register(titcontext.RegisterArea, x87r0_position, 6)), (char*) NewRegisterValue, 10);
|
||||
}
|
||||
else if(IndexOfRegister == UE_x87_r7)
|
||||
{
|
||||
int STInTopStack = GetSTInTOPStackFromStatusWord(titcontext.x87fpu.StatusWord);
|
||||
DWORD x87r0_position = Getx87r0PositionInRegisterArea(STInTopStack);
|
||||
|
||||
memcpy(((uint64_t*) GetRegisterAreaOf87register(titcontext.RegisterArea, x87r0_position, 7)), (char*) NewRegisterValue, 10);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
|||
Loading…
Reference in New Issue