From a5eecf59b39f4b9cc58a8e8fb4906fb329d70eea Mon Sep 17 00:00:00 2001 From: Flyinghead Date: Mon, 29 Mar 2021 17:30:56 +0200 Subject: [PATCH] x64 rec: wrong arg0 reg for windows. need to handle 512mb addr space --- core/rec-x64/rec_x64.cpp | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/core/rec-x64/rec_x64.cpp b/core/rec-x64/rec_x64.cpp index 922ab4488..82a5512de 100644 --- a/core/rec-x64/rec_x64.cpp +++ b/core/rec-x64/rec_x64.cpp @@ -768,7 +768,14 @@ public: //found ! const u8 *start = getCurr(); - if (op == MemOp::W && size >= MemSize::S32 && (context.rdi >> 26) == 0x38) + u32 memAddress = _nvmem_4gb_space() ? +#ifdef _WIN32 + context.rcx +#else + context.rdi +#endif + : context.r9; + if (op == MemOp::W && size >= MemSize::S32 && (memAddress >> 26) == 0x38) call(MemHandlers[MemType::StoreQueue][size][MemOp::W]); else call(MemHandlers[MemType::Slow][size][op]); @@ -782,9 +789,9 @@ public: if (!_nvmem_4gb_space()) //restore the addr from r9 to arg0 (rcx or rdi) so it's valid again #ifdef _WIN32 - context.rcx = context.r9; + context.rcx = memAddress; #else - context.rdi = context.r9; + context.rdi = memAddress; #endif return true;