From 94181be28085ecbd56b63cdaa0fc314161cc1f8b Mon Sep 17 00:00:00 2001 From: Peace-Maker Date: Tue, 23 Jan 2018 03:16:46 +0100 Subject: [PATCH] Fix assert when the pre-hook was fired, but the post hook was skipped The post hook would have cleared the esp value from the return address map, but there seems to be a case where the post hook isn't called, but the function gets called with the same esp again. This is probably just masking a different error :( --- DynamicHooks/hook.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/DynamicHooks/hook.cpp b/DynamicHooks/hook.cpp index eee9c35..edc11f8 100644 --- a/DynamicHooks/hook.cpp +++ b/DynamicHooks/hook.cpp @@ -207,7 +207,10 @@ void* __cdecl CHook::GetReturnAddress(void* pESP) void __cdecl CHook::SetReturnAddress(void* pRetAddr, void* pESP) { ReturnAddressMap::Insert i = m_RetAddr.findForAdd(pESP); - m_RetAddr.add(i, pESP, pRetAddr); + if (i.found()) + i->value = pRetAddr; + else + m_RetAddr.add(i, pESP, pRetAddr); } void* CHook::CreateBridge()