From da5b26b583899a5c90a7f514cae302c1f30a6757 Mon Sep 17 00:00:00 2001 From: Maschell Date: Sun, 17 May 2020 21:04:16 +0200 Subject: [PATCH] Add callDeinitHooks and RestorePatches to the PlugingManagement --- source/PluginManagement.cpp | 23 +++++++++++++++++++++++ source/PluginManagement.h | 4 ++++ 2 files changed, 27 insertions(+) diff --git a/source/PluginManagement.cpp b/source/PluginManagement.cpp index fd9aa82..10f2bac 100644 --- a/source/PluginManagement.cpp +++ b/source/PluginManagement.cpp @@ -69,6 +69,29 @@ void PluginManagement::memsetBSS(const std::vector &plugins) { } } +void PluginManagement::callDeinitHooks(plugin_information_t *pluginInformation) { + CallHook(pluginInformation, WUPS_LOADER_HOOK_RELEASE_FOREGROUND); + CallHook(pluginInformation, WUPS_LOADER_HOOK_APPLICATION_END); + CallHook(pluginInformation, WUPS_LOADER_HOOK_DEINIT_PLUGIN); + + CallHook(pluginInformation, WUPS_LOADER_HOOK_FINI_WUT_DEVOPTAB); + CallHook(pluginInformation, WUPS_LOADER_HOOK_FINI_WUT_STDCPP); + CallHook(pluginInformation, WUPS_LOADER_HOOK_FINI_WUT_NEWLIB); + CallHook(pluginInformation, WUPS_LOADER_HOOK_FINI_WUT_MALLOC); + + DEBUG_FUNCTION_LINE("Done calling deinit hooks"); +} + + +void PluginManagement::RestorePatches(plugin_information_t *pluginInformation, BOOL pluginOnly) { + for (int32_t plugin_index = pluginInformation->number_used_plugins - 1; plugin_index >= 0; plugin_index--) { + new_RestoreInvidualInstructions(&(pluginInformation->plugin_data[plugin_index].info)); + } + if (!pluginOnly) { + RestoreInvidualInstructions(method_hooks_hooks, method_hooks_size_hooks); + RestoreInvidualInstructions(method_hooks_hooks_static, method_hooks_size_hooks_static); + } +} void PluginManagement::unloadPlugins(plugin_information_t *gPluginInformation, MEMHeapHandle pluginHeap) { for (int32_t plugin_index = 0; plugin_index < gPluginInformation->number_used_plugins; plugin_index++) { diff --git a/source/PluginManagement.h b/source/PluginManagement.h index 89c20b9..a658528 100644 --- a/source/PluginManagement.h +++ b/source/PluginManagement.h @@ -20,4 +20,8 @@ public: static void unloadPlugins(plugin_information_t * pluginInformation, MEMHeapHandle pluginHeap); static std::vector loadPlugins(const std::vector &pluginList, MEMHeapHandle pHeader, relocation_trampolin_entry_t *trampolin_data, uint32_t trampolin_data_length); + + static void RestorePatches(plugin_information_t *pluginInformation, BOOL pluginOnly); + + static void callDeinitHooks(plugin_information_t *pluginInformation); }; \ No newline at end of file