From c1816e24b22ef518573f03118c84042e437a2eff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Franti=C5=A1ek=20Boh=C3=A1=C4=8Dek?= Date: Mon, 20 Dec 2021 15:01:20 +0100 Subject: [PATCH] fix: correctly store trampoline function from detours --- .../NosSmooth.LocalCore/NetworkUnmanaged.cpp | 24 ++++++++++++------- Local/NosSmooth.LocalCore/NetworkUnmanaged.h | 1 + 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/Local/NosSmooth.LocalCore/NetworkUnmanaged.cpp b/Local/NosSmooth.LocalCore/NetworkUnmanaged.cpp index 0486305..4e4aeac 100644 --- a/Local/NosSmooth.LocalCore/NetworkUnmanaged.cpp +++ b/Local/NosSmooth.LocalCore/NetworkUnmanaged.cpp @@ -81,8 +81,8 @@ void NetworkUnmanaged::Setup(ModuleHook moduleHook) DetourTransactionBegin(); DetourUpdateThread(GetCurrentThread()); - DetourAttach(&reinterpret_cast(sendFunction), PacketSendDetour); - DetourAttach(&reinterpret_cast(receiveFunction), PacketReceiveDetour); + DetourAttach(&reinterpret_cast(_sendPacketAddress), PacketSendDetour); + DetourAttach(&(PVOID&)_receivePacketAddress, PacketReceiveDetour); DetourTransactionCommit(); } @@ -91,7 +91,7 @@ void NetworkUnmanaged::SendPacket(const char *packet) __asm { mov esi, this - mov eax, [esi]._callerObject + mov eax, dword ptr ds : [esi]._callerObject mov eax, dword ptr ds : [eax] mov eax, dword ptr ds : [eax] mov edx, packet @@ -104,10 +104,10 @@ void NetworkUnmanaged::ReceivePacket(const char* packet) __asm { mov esi, this - mov eax, [esi]._callerObject + mov eax, dword ptr ds : [esi]._callerObject mov eax, dword ptr ds : [eax] mov eax, dword ptr ds : [eax] - mov eax, dword ptr ds : [eax + 34h] + mov eax, dword ptr ds : [eax + 0x34] mov edx, packet call[esi]._receivePacketAddress } @@ -118,7 +118,7 @@ void NetworkUnmanaged::ResetHooks() DetourTransactionBegin(); DetourUpdateThread(GetCurrentThread()); DetourDetach(&reinterpret_cast(_sendPacketAddress), PacketSendDetour); - DetourDetach(&reinterpret_cast(_receivePacketAddress), PacketReceiveDetour); + DetourDetach(&(PVOID&)_receivePacketAddress, PacketReceiveDetour); DetourTransactionCommit(); } @@ -134,10 +134,18 @@ void NetworkUnmanaged::SetSendCallback(PacketCallback callback) bool NetworkUnmanaged::ExecuteReceiveCallback(const char *packet) { - return _receiveCallback(packet); + if (_receiveCallback != nullptr) { + return _receiveCallback(packet); + } + + return true; } bool NetworkUnmanaged::ExecuteSendCallback(const char* packet) { - return _sendCallback(packet); + if (_sendCallback != nullptr) { + return _sendCallback(packet); + } + + return true; } \ No newline at end of file diff --git a/Local/NosSmooth.LocalCore/NetworkUnmanaged.h b/Local/NosSmooth.LocalCore/NetworkUnmanaged.h index f2ea89e..00ff038 100644 --- a/Local/NosSmooth.LocalCore/NetworkUnmanaged.h +++ b/Local/NosSmooth.LocalCore/NetworkUnmanaged.h @@ -50,6 +50,7 @@ namespace NosSmoothCore return reinterpret_cast(&instance); } private: + NetworkUnmanaged(); unsigned int _callerObject; unsigned int _receivePacketAddress; unsigned int _sendPacketAddress; -- 2.48.1