From ac0c341eb471b8e5b2cc26fc7cddf20478d6872e Mon Sep 17 00:00:00 2001 From: Maschell Date: Mon, 2 Jan 2023 16:24:38 +0100 Subject: [PATCH] Reset the cached function handle if RPL has been unloaded --- source/FunctionAddressProvider.cpp | 9 +++++++++ source/FunctionAddressProvider.h | 2 ++ source/main.cpp | 1 + 3 files changed, 12 insertions(+) diff --git a/source/FunctionAddressProvider.cpp b/source/FunctionAddressProvider.cpp index 4af59c4..e134e14 100644 --- a/source/FunctionAddressProvider.cpp +++ b/source/FunctionAddressProvider.cpp @@ -67,3 +67,12 @@ function_replacement_library_type_t FunctionAddressProvider::getTypeForHandle(OS return LIBRARY_OTHER; } +bool FunctionAddressProvider::resetHandle(OSDynLoad_Module handle) { + for (auto &rplHandle : rpl_handles) { + if (rplHandle.handle == handle) { + rplHandle.handle = nullptr; + return true; + } + } + return false; +} diff --git a/source/FunctionAddressProvider.h b/source/FunctionAddressProvider.h index 8f5fa9b..a86b960 100644 --- a/source/FunctionAddressProvider.h +++ b/source/FunctionAddressProvider.h @@ -18,6 +18,8 @@ public: function_replacement_library_type_t getTypeForHandle(OSDynLoad_Module toReset); + bool resetHandle(OSDynLoad_Module handle); + std::list rpl_handles = { {LIBRARY_AVM, "avm.rpl", nullptr}, {LIBRARY_CAMERA, "camera.rpl", nullptr}, diff --git a/source/main.cpp b/source/main.cpp index 2a50374..209f3f2 100644 --- a/source/main.cpp +++ b/source/main.cpp @@ -106,6 +106,7 @@ void notify_callback(OSDynLoad_Module module, } } } + gFunctionAddressProvider->resetHandle(module); CheckIfPatchedFunctionsAreStillInMemory(); } }