From 806f81e1871d9911acf47f0c43030f9aafa1e862 Mon Sep 17 00:00:00 2001 From: mrexodia Date: Sun, 25 Sep 2016 17:48:35 +0200 Subject: [PATCH] small fixed with MxCsr and other FltSave structures for x64 --- TitanEngine/Global.Engine.Context.cpp | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/TitanEngine/Global.Engine.Context.cpp b/TitanEngine/Global.Engine.Context.cpp index 424caa0..9592f11 100644 --- a/TitanEngine/Global.Engine.Context.cpp +++ b/TitanEngine/Global.Engine.Context.cpp @@ -56,18 +56,13 @@ bool _SetFullContextDataEx(HANDLE hActiveThread, TITAN_ENGINE_CONTEXT_t* titcont DBGContext.FltSave.ControlWord = titcontext->x87fpu.ControlWord; DBGContext.FltSave.StatusWord = titcontext->x87fpu.StatusWord; - memcpy(& (DBGContext.FltSave.TagWord), & (titcontext->x87fpu.TagWord), sizeof(titcontext->x87fpu.TagWord)); -#ifdef _WIN64 -#define WIN64_CASTDWORDTOWORD (WORD) -#else -#define WIN64_CASTDWORDTOWORD (DWORD) -#endif - DBGContext.FltSave.ErrorSelector = WIN64_CASTDWORDTOWORD titcontext->x87fpu.ErrorSelector; + DBGContext.FltSave.TagWord = (BYTE)titcontext->x87fpu.TagWord; + DBGContext.FltSave.ErrorSelector = (WORD)titcontext->x87fpu.ErrorSelector; DBGContext.FltSave.ErrorOffset = titcontext->x87fpu.ErrorOffset; - DBGContext.FltSave.DataSelector = WIN64_CASTDWORDTOWORD titcontext->x87fpu.DataSelector; + DBGContext.FltSave.DataSelector = (WORD)titcontext->x87fpu.DataSelector; DBGContext.FltSave.DataOffset = titcontext->x87fpu.DataOffset; // Skip titcontext->x87fpu.Cr0NpxState - DBGContext.FltSave.MxCsr = titcontext->MxCsr; + DBGContext.MxCsr = titcontext->MxCsr; for(int i = 0; i < 8; i++) memcpy(& DBGContext.FltSave.FloatRegisters[i], &(titcontext->RegisterArea[i * 10]), 10); @@ -159,13 +154,13 @@ bool _GetFullContextDataEx(HANDLE hActiveThread, TITAN_ENGINE_CONTEXT_t* titcont titcontext->x87fpu.ControlWord = DBGContext.FltSave.ControlWord; titcontext->x87fpu.StatusWord = DBGContext.FltSave.StatusWord; - memcpy(& (titcontext->x87fpu.TagWord), & (DBGContext.FltSave.TagWord), sizeof(titcontext->x87fpu.TagWord)); + titcontext->x87fpu.TagWord = DBGContext.FltSave.TagWord; titcontext->x87fpu.ErrorSelector = DBGContext.FltSave.ErrorSelector; titcontext->x87fpu.ErrorOffset = DBGContext.FltSave.ErrorOffset; titcontext->x87fpu.DataSelector = DBGContext.FltSave.DataSelector; titcontext->x87fpu.DataOffset = DBGContext.FltSave.DataOffset; // Skip titcontext->x87fpu.Cr0NpxState - titcontext->MxCsr = DBGContext.FltSave.MxCsr; + titcontext->MxCsr = DBGContext.MxCsr; for(int i = 0; i < 8; i++) memcpy(&(titcontext->RegisterArea[i * 10]), & DBGContext.FltSave.FloatRegisters[i], 10);