From d2596e8442b9d616659a4775136184800f8d7cba Mon Sep 17 00:00:00 2001 From: vxunderground <57078196+vxunderground@users.noreply.github.com> Date: Sun, 17 Jul 2022 22:33:43 -0500 Subject: [PATCH] Update RfGetModuleHandle.cpp bug fix --- .../Library Loading/RfGetModuleHandle.cpp | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/Windows API/Library Loading/RfGetModuleHandle.cpp b/Windows API/Library Loading/RfGetModuleHandle.cpp index 41ea8bd..9cd700a 100644 --- a/Windows API/Library Loading/RfGetModuleHandle.cpp +++ b/Windows API/Library Loading/RfGetModuleHandle.cpp @@ -3,12 +3,13 @@ HMODULE RfGetModuleHandleA(LPCSTR lpModuleName) PPEB Peb = GetPeb(); PLDR_MODULE Module = NULL; CHAR wDllName[64] = { 0 }; + PLIST_ENTRY Head = &Peb->LoaderData->InMemoryOrderModuleList; + PLIST_ENTRY Next = Head->Flink; + Module = (PLDR_MODULE)((PBYTE)Next - 16); - Module = (PLDR_MODULE)((PBYTE)Peb->LoaderData->InMemoryOrderModuleList.Flink - 16); - - while (Module != NULL) + while (Next != Head) { - Module = (PLDR_MODULE)((PBYTE)Module->InMemoryOrderModuleList.Flink - 16); + Module = (PLDR_MODULE)((PBYTE)Next - 16); if (Module->BaseDllName.Buffer != NULL) { RfZeroMemory(wDllName, sizeof(wDllName)); @@ -26,16 +27,20 @@ HMODULE RfGetModuleHandleW(LPCWSTR lpModuleName) PPEB Peb = GetPeb(); PLDR_MODULE Module = NULL; - Module = (PLDR_MODULE)((PBYTE)Peb->LoaderData->InMemoryOrderModuleList.Flink - 16); + PLIST_ENTRY Head = &Peb->LoaderData->InMemoryOrderModuleList; + PLIST_ENTRY Next = Head->Flink; + Module = (PLDR_MODULE)((PBYTE)Next - 16); - while (Module != NULL) + while (Next != Head) { - Module = (PLDR_MODULE)((PBYTE)Module->InMemoryOrderModuleList.Flink - 16); + Module = (PLDR_MODULE)((PBYTE)Next - 16); if (Module->BaseDllName.Buffer != NULL) { if (StringCompareW(lpModuleName, Module->BaseDllName.Buffer) == 0) return (HMODULE)Module->BaseAddress; } + + Next = Next->Flink; } return NULL;