diff --git a/src/plugins/HookSystem.cpp b/src/plugins/HookSystem.cpp index f39eb145b..906c19859 100644 --- a/src/plugins/HookSystem.cpp +++ b/src/plugins/HookSystem.cpp @@ -182,8 +182,8 @@ bool CFunctionHook::hook() { return false; } - m_originalBytes = malloc(ORIGSIZE); - memcpy(m_originalBytes, m_source, ORIGSIZE); + m_originalBytes.resize(ORIGSIZE); + memcpy(m_originalBytes.data(), m_source, ORIGSIZE); // populate trampoline memcpy(m_trampolineAddr, PROBEFIXEDASM.bytes.data(), HOOKSIZE); // first, original but fixed func bytes @@ -235,7 +235,7 @@ bool CFunctionHook::unhook() { mprotect((uint8_t*)m_source - ((uint64_t)m_source) % sysconf(_SC_PAGE_SIZE), sysconf(_SC_PAGE_SIZE), PROT_READ | PROT_WRITE | PROT_EXEC); // write back original bytes - memcpy(m_source, m_originalBytes, m_hookLen); + memcpy(m_source, m_originalBytes.data(), m_hookLen); // revert mprot mprotect((uint8_t*)m_source - ((uint64_t)m_source) % sysconf(_SC_PAGE_SIZE), sysconf(_SC_PAGE_SIZE), PROT_READ | PROT_EXEC); @@ -245,9 +245,7 @@ bool CFunctionHook::unhook() { m_hookLen = 0; m_trampoLen = 0; m_trampolineAddr = nullptr; // no unmapping, it's managed by the HookSystem - m_originalBytes = nullptr; - - free(m_originalBytes); + m_originalBytes.clear(); return true; } diff --git a/src/plugins/HookSystem.hpp b/src/plugins/HookSystem.hpp index 801d950ea..95b4c9728 100644 --- a/src/plugins/HookSystem.hpp +++ b/src/plugins/HookSystem.hpp @@ -2,6 +2,7 @@ #include #include +#include #include "../helpers/memory/Memory.hpp" #define HANDLE void* @@ -23,15 +24,15 @@ class CFunctionHook { void* m_original = nullptr; private: - void* m_source = nullptr; - void* m_trampolineAddr = nullptr; - void* m_destination = nullptr; - size_t m_hookLen = 0; - size_t m_trampoLen = 0; - HANDLE m_owner = nullptr; - bool m_active = false; + void* m_source = nullptr; + void* m_trampolineAddr = nullptr; + void* m_destination = nullptr; + size_t m_hookLen = 0; + size_t m_trampoLen = 0; + HANDLE m_owner = nullptr; + bool m_active = false; - void* m_originalBytes = nullptr; + std::vector m_originalBytes; struct SInstructionProbe { size_t len = 0;