From de5bda0d19064f85d103da69ab2f5d167bf7d9c9 Mon Sep 17 00:00:00 2001 From: Cube Date: Wed, 6 Jan 2021 14:37:10 -0500 Subject: Added RtlFreeHeap and RtlSetHeapInformation APIs --- peloader/winapi/Heap.c | 20 ++++++++++++++++++++ peloader/winapi/LoadLibrary.c | 8 ++++---- 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/peloader/winapi/Heap.c b/peloader/winapi/Heap.c index d34bf07..5747232 100644 --- a/peloader/winapi/Heap.c +++ b/peloader/winapi/Heap.c @@ -51,6 +51,15 @@ STATIC BOOL WINAPI HeapFree(HANDLE hHeap, DWORD dwFlags, PVOID lpMem) return TRUE; } +STATIC BOOL WINAPI RtlFreeHeap(PVOID HeapHandle, ULONG Flags, PVOID BaseAddress) +{ + DebugLog("%p, %#x, %p", HeapHandle, Flags, BaseAddress); + + free(BaseAddress); + + return TRUE; +} + STATIC SIZE_T WINAPI HeapSize(HANDLE hHeap, DWORD dwFlags, PVOID lpMem) { return malloc_usable_size(lpMem); @@ -105,6 +114,15 @@ STATIC PVOID WINAPI RtlAllocateHeap(PVOID HeapHandle, return malloc(Size); } +STATIC NTSTATUS WINAPI RtlSetHeapInformation(PVOID Heap, + HEAP_INFORMATION_CLASS HeapInformationClass, + PVOID HeapInformation, + SIZE_T HeapInformationLength) +{ + DebugLog("%p, %d", Heap, HeapInformationLength); + return 0; +} + STATIC PVOID WINAPI GlobalAlloc(UINT uFlags, SIZE_T uBytes) { PVOID Buffer = malloc(uBytes); @@ -126,6 +144,8 @@ DECLARE_CRT_EXPORT("HeapCreate", HeapCreate); DECLARE_CRT_EXPORT("GetProcessHeap", GetProcessHeap); DECLARE_CRT_EXPORT("HeapAlloc", HeapAlloc); DECLARE_CRT_EXPORT("HeapFree", HeapFree); +DECLARE_CRT_EXPORT("RtlFreeHeap", RtlFreeHeap); +DECLARE_CRT_EXPORT("RtlSetHeapInformation", RtlSetHeapInformation); DECLARE_CRT_EXPORT("HeapSize", HeapSize); DECLARE_CRT_EXPORT("HeapReAlloc", HeapReAlloc); DECLARE_CRT_EXPORT("LocalAlloc", LocalAlloc); diff --git a/peloader/winapi/LoadLibrary.c b/peloader/winapi/LoadLibrary.c index ba796bd..cc95e05 100644 --- a/peloader/winapi/LoadLibrary.c +++ b/peloader/winapi/LoadLibrary.c @@ -77,7 +77,7 @@ static DWORD WINAPI GetModuleFileNameA(HANDLE hModule, PCHAR lpFilename, DWORD n { DebugLog("%p, %p, %u", hModule, lpFilename, nSize); - strncpy(lpFilename, "fakename.exe", nSize); + strncpy(lpFilename, "C:\\dummy\\fakename.exe", nSize); return strlen(lpFilename); } @@ -86,11 +86,11 @@ static DWORD WINAPI GetModuleFileNameW(HANDLE hModule, PWCHAR lpFilename, DWORD { DebugLog("%p, %p, %u", hModule, lpFilename, nSize); - if (nSize > strlen("fakename.exe")) { - memcpy(lpFilename, L"fakename.exe", sizeof(L"fakename.exe")); + if (nSize > strlen("C:\\dummy\\fakename.exe")) { + memcpy(lpFilename, L"C:\\dummy\\fakename.exe", sizeof(L"C:\\dummy\\fakename.exe")); } - return strlen("fakename.exe"); + return strlen("C:\\dummy\\fakename.exe"); } static HANDLE WINAPI GetModuleHandleA(PCHAR lpModuleName) -- cgit v1.2.3