diff --git a/extensions/dhooks/AMBuilder b/extensions/dhooks/AMBuilder index a581be85..151b9225 100644 --- a/extensions/dhooks/AMBuilder +++ b/extensions/dhooks/AMBuilder @@ -19,6 +19,8 @@ for cxx in builder.targets: binary.compiler.cxxincludes += [ os.path.join(SM.mms_root, 'core'), os.path.join(SM.mms_root, 'core', 'sourcehook'), + os.path.join(builder.sourcePath, 'public', 'jit'), + os.path.join(builder.sourcePath, 'public', 'jit', 'x86'), os.path.join(builder.sourcePath, 'sourcepawn', 'include'), os.path.join(builder.sourcePath, 'sourcepawn', 'vm'), os.path.join(builder.sourcePath, 'sourcepawn', 'vm', 'x86'), @@ -49,7 +51,6 @@ for cxx in builder.targets: os.path.join('DynamicHooks', 'hook.cpp'), os.path.join('DynamicHooks', 'manager.cpp'), os.path.join('DynamicHooks', 'registers.cpp'), - os.path.join('DynamicHooks', 'utilities.cpp'), os.path.join('DynamicHooks', 'conventions', 'x86MsCdecl.cpp'), os.path.join('DynamicHooks', 'conventions', 'x86MsStdcall.cpp'), os.path.join('DynamicHooks', 'conventions', 'x86MsFastcall.cpp'), diff --git a/extensions/dhooks/DynamicHooks/hook.cpp b/extensions/dhooks/DynamicHooks/hook.cpp index d9c7f4df..964b8011 100644 --- a/extensions/dhooks/DynamicHooks/hook.cpp +++ b/extensions/dhooks/DynamicHooks/hook.cpp @@ -35,10 +35,11 @@ // >> INCLUDES // ============================================================================ #include "hook.h" -#include "utilities.h" #include #include #include "extension.h" +#include +#include using namespace sp; @@ -79,7 +80,7 @@ CHook::CHook(void* pFunc, ICallingConvention* pConvention) copy_bytes(pTarget, pCopiedBytes, JMP_SIZE); // Write a jump after the copied bytes to the function/bridge + number of bytes to copy - WriteJMP(pCopiedBytes + iBytesToCopy, pTarget + iBytesToCopy); + DoGatePatch(pCopiedBytes + iBytesToCopy, pTarget + iBytesToCopy); // Save the trampoline m_pTrampoline = (void *) pCopiedBytes; @@ -88,7 +89,7 @@ CHook::CHook(void* pFunc, ICallingConvention* pConvention) m_pBridge = CreateBridge(); // Write a jump to the bridge - WriteJMP((unsigned char *) pFunc, m_pBridge); + DoGatePatch((unsigned char *) pFunc, m_pBridge); } CHook::~CHook() diff --git a/extensions/dhooks/DynamicHooks/utilities.cpp b/extensions/dhooks/DynamicHooks/utilities.cpp deleted file mode 100644 index c48994cb..00000000 --- a/extensions/dhooks/DynamicHooks/utilities.cpp +++ /dev/null @@ -1,73 +0,0 @@ -/** -* ============================================================================= -* DynamicHooks -* Copyright (C) 2015 Robin Gohmert. All rights reserved. -* Copyright (C) 2018-2021 AlliedModders LLC. All rights reserved. -* ============================================================================= -* -* This software is provided 'as-is', without any express or implied warranty. -* In no event will the authors be held liable for any damages arising from -* the use of this software. -* -* Permission is granted to anyone to use this software for any purpose, -* including commercial applications, and to alter it and redistribute it -* freely, subject to the following restrictions: -* -* 1. The origin of this software must not be misrepresented; you must not -* claim that you wrote the original software. If you use this software in a -* product, an acknowledgment in the product documentation would be -* appreciated but is not required. -* -* 2. Altered source versions must be plainly marked as such, and must not be -* misrepresented as being the original software. -* -* 3. This notice may not be removed or altered from any source distribution. -* -* asm.h/cpp from devmaster.net (thanks cybermind) edited by pRED* to handle gcc -* -fPIC thunks correctly -* -* Idea and trampoline code taken from DynDetours (thanks your-name-here). -*/ - -// ============================================================================ -// >> INCLUDES -// ============================================================================ -#ifdef _WIN32 - #include -#endif - -#ifdef __linux__ - #include - #include - #include - #define PAGE_SIZE 4096 - #define ALIGN(ar) ((long)ar & ~(PAGE_SIZE-1)) - #define PAGE_EXECUTE_READWRITE PROT_READ|PROT_WRITE|PROT_EXEC -#endif - -#include - - -// ============================================================================ -// >> ParseParams -// ============================================================================ -void SetMemPatchable(void* pAddr, size_t size) -{ -#if defined __linux__ - if (mprotect((void *) ALIGN(pAddr), sysconf(_SC_PAGESIZE), PAGE_EXECUTE_READWRITE) == -1) - perror("mprotect"); -#elif defined _WIN32 - DWORD old_prot; - VirtualProtect(pAddr, size, PAGE_EXECUTE_READWRITE, &old_prot); -#endif -} - - -// ============================================================================ -// >> WriteJMP -// ============================================================================ -void WriteJMP(unsigned char* src, void* dest) -{ - SetMemPatchable(src, 20); - inject_jmp((void *)src, dest); -} diff --git a/extensions/dhooks/DynamicHooks/utilities.h b/extensions/dhooks/DynamicHooks/utilities.h deleted file mode 100644 index 008646c2..00000000 --- a/extensions/dhooks/DynamicHooks/utilities.h +++ /dev/null @@ -1,41 +0,0 @@ -/** -* ============================================================================= -* DynamicHooks -* Copyright (C) 2015 Robin Gohmert. All rights reserved. -* Copyright (C) 2018-2021 AlliedModders LLC. All rights reserved. -* ============================================================================= -* -* This software is provided 'as-is', without any express or implied warranty. -* In no event will the authors be held liable for any damages arising from -* the use of this software. -* -* Permission is granted to anyone to use this software for any purpose, -* including commercial applications, and to alter it and redistribute it -* freely, subject to the following restrictions: -* -* 1. The origin of this software must not be misrepresented; you must not -* claim that you wrote the original software. If you use this software in a -* product, an acknowledgment in the product documentation would be -* appreciated but is not required. -* -* 2. Altered source versions must be plainly marked as such, and must not be -* misrepresented as being the original software. -* -* 3. This notice may not be removed or altered from any source distribution. -* -* asm.h/cpp from devmaster.net (thanks cybermind) edited by pRED* to handle gcc -* -fPIC thunks correctly -* -* Idea and trampoline code taken from DynDetours (thanks your-name-here). -*/ - -#ifndef _UTILITIES_H -#define _UTILITIES_H - -// ============================================================================ -// >> FUNCTIONS -// ============================================================================ -void SetMemPatchable(void* pAddr, size_t size); -void WriteJMP(unsigned char* src, void* dest); - -#endif // _UTILITIES_H \ No newline at end of file