From 77e016f336d7ed96ea826b56df0d5e8693977929 Mon Sep 17 00:00:00 2001 From: Kenzzer Date: Thu, 23 Jan 2025 00:01:41 +0100 Subject: [PATCH] Fix dhooks regression --- extensions/dhooks/DynamicHooks/hook.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/extensions/dhooks/DynamicHooks/hook.cpp b/extensions/dhooks/DynamicHooks/hook.cpp index 1725ab77d6..4bbb59a920 100644 --- a/extensions/dhooks/DynamicHooks/hook.cpp +++ b/extensions/dhooks/DynamicHooks/hook.cpp @@ -317,9 +317,13 @@ void CHook::CreateBridge() PrintRegisters(jit); // Jump to the trampoline + jit.sub(rsp, 8); + jit.push(rax); jit.mov(rax, reinterpret_cast(&m_pTrampoline)); jit.mov(rax, rax()); - jit.jump(rax); + jit.mov(rsp(8), rax); + jit.pop(rax); + jit.retn(); // This code will be executed if a pre-hook returns ReturnAction_Supercede jit.rewrite(jumpOff - sizeof(std::int32_t), jit.get_outputpos() - jumpOff); @@ -621,8 +625,12 @@ void CHook::CreateBridge() masm.j(equal, &label_supercede); // Jump to the trampoline + masm.subl(esp, 4); + masm.push(eax); masm.movl(eax, Operand(ExternalAddress(&m_pTrampoline))); - masm.jmp(eax); + masm.movl(Operand(esp, 4), eax); + masm.pop(eax); + masm.ret(); // This code will be executed if a pre-hook returns ReturnAction_Supercede masm.bind(&label_supercede);