From d7fb08381d9b4fd8f8e53da89ca48a719f65e65d Mon Sep 17 00:00:00 2001 From: Ratin Gao Date: Mon, 25 Mar 2024 00:36:35 +0800 Subject: [PATCH] [SLIMDETOURS] Improve initialization --- Source/SlimDetours/Instruction.c | 5 ++++ Source/SlimDetours/SlimDetours.c | 23 ------------------- Source/SlimDetours/SlimDetours.cpp | 16 +++++++++++++ Source/SlimDetours/SlimDetours.inl | 2 +- Source/SlimDetours/SlimDetours.vcxproj | 2 +- .../SlimDetours/SlimDetours.vcxproj.filters | 2 +- Source/SlimDetours/Transaction.c | 4 ---- 7 files changed, 24 insertions(+), 30 deletions(-) delete mode 100644 Source/SlimDetours/SlimDetours.c create mode 100644 Source/SlimDetours/SlimDetours.cpp diff --git a/Source/SlimDetours/Instruction.c b/Source/SlimDetours/Instruction.c index fa9523a2..98f276bc 100644 --- a/Source/SlimDetours/Instruction.c +++ b/Source/SlimDetours/Instruction.c @@ -606,3 +606,8 @@ ULONG detour_is_code_filler(_In_ PBYTE pbCode) } #endif // defined(_M_ARM64) + +PVOID NTAPI SlimDetoursCodeFromPointer(_In_ PVOID pPointer) +{ + return detour_skip_jmp((PBYTE)pPointer); +} diff --git a/Source/SlimDetours/SlimDetours.c b/Source/SlimDetours/SlimDetours.c deleted file mode 100644 index 7bc841a9..00000000 --- a/Source/SlimDetours/SlimDetours.c +++ /dev/null @@ -1,23 +0,0 @@ -/* - * KNSoft SlimDetours (https://github.com/KNSoft/SlimDetours) Core Functionality - * Copyright (c) KNSoft.org (https://github.com/KNSoft). All rights reserved. - * Licensed under the MPL-2.0 license. - */ - -#include "SlimDetours.inl" - -static RTL_RUN_ONCE g_InitOnce = RTL_RUN_ONCE_INIT; - -VOID detour_init() -{ - if (RtlRunOnceBeginInitialize(&g_InitOnce, 0, NULL) == STATUS_PENDING) - { - detour_memory_init(); - RtlRunOnceComplete(&g_InitOnce, 0, NULL); - } -} - -PVOID NTAPI SlimDetoursCodeFromPointer(_In_ PVOID pPointer) -{ - return detour_skip_jmp((PBYTE)pPointer); -} diff --git a/Source/SlimDetours/SlimDetours.cpp b/Source/SlimDetours/SlimDetours.cpp new file mode 100644 index 00000000..269e1ff0 --- /dev/null +++ b/Source/SlimDetours/SlimDetours.cpp @@ -0,0 +1,16 @@ +/* + * KNSoft SlimDetours (https://github.com/KNSoft/SlimDetours) Core Functionality + * Copyright (c) KNSoft.org (https://github.com/KNSoft). All rights reserved. + * Licensed under the MPL-2.0 license. + */ + +#include "SlimDetours.inl" + +static BOOL g_Initialized = detour_init(); + +BOOL detour_init() +{ + detour_memory_init(); + + return TRUE; +} diff --git a/Source/SlimDetours/SlimDetours.inl b/Source/SlimDetours/SlimDetours.inl index 7baa7229..ad1e4737 100644 --- a/Source/SlimDetours/SlimDetours.inl +++ b/Source/SlimDetours/SlimDetours.inl @@ -24,7 +24,7 @@ EXTERN_C_START -VOID detour_init(); +BOOL detour_init(); /* Basic structures */ diff --git a/Source/SlimDetours/SlimDetours.vcxproj b/Source/SlimDetours/SlimDetours.vcxproj index f6b5d999..3cb1f82b 100644 --- a/Source/SlimDetours/SlimDetours.vcxproj +++ b/Source/SlimDetours/SlimDetours.vcxproj @@ -29,7 +29,7 @@ - + diff --git a/Source/SlimDetours/SlimDetours.vcxproj.filters b/Source/SlimDetours/SlimDetours.vcxproj.filters index 011132d1..ba0d776e 100644 --- a/Source/SlimDetours/SlimDetours.vcxproj.filters +++ b/Source/SlimDetours/SlimDetours.vcxproj.filters @@ -2,7 +2,7 @@ - + diff --git a/Source/SlimDetours/Transaction.c b/Source/SlimDetours/Transaction.c index 373ea911..044fce6e 100644 --- a/Source/SlimDetours/Transaction.c +++ b/Source/SlimDetours/Transaction.c @@ -51,8 +51,6 @@ NTSTATUS NTAPI SlimDetoursTransactionBegin() return STATUS_TRANSACTIONAL_CONFLICT; } - detour_init(); - // Make sure the trampoline pages are writable. Status = detour_writable_trampoline_regions(); if (!NT_SUCCESS(Status)) @@ -638,8 +636,6 @@ NTSTATUS NTAPI SlimDetoursDelayAttach( PVOID DllBase; PDETOUR_DELAY_ATTACH NewNode; - detour_init(); - /* Check if Dll is already loaded */ RtlInitUnicodeStringEx(&DllNameString, DllName); Status = LdrGetDllHandle(NULL, NULL, &DllNameString, &DllBase);