mirror of
https://github.com/fancycode/MemoryModule
synced 2026-06-06 15:44:28 +00:00
Added x64 exception handling
This commit is contained in:
@@ -435,6 +435,15 @@ PerformBaseRelocation(PMEMORYMODULE module, ptrdiff_t delta)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static BOOL
|
||||
RegisterExceptionHandling(PMEMORYMODULE module)
|
||||
{
|
||||
PIMAGE_DATA_DIRECTORY pDir = GET_HEADER_DICTIONARY(module, IMAGE_DIRECTORY_ENTRY_EXCEPTION);
|
||||
PIMAGE_RUNTIME_FUNCTION_ENTRY pEntry = (PIMAGE_RUNTIME_FUNCTION_ENTRY)(module->codeBase + pDir->VirtualAddress);
|
||||
UINT count = (pDir->Size / sizeof(IMAGE_RUNTIME_FUNCTION_ENTRY)) - 1;
|
||||
return RtlAddFunctionTable(pEntry, count, (DWORD64)module->codeBase);
|
||||
}
|
||||
|
||||
static BOOL
|
||||
BuildImportTable(PMEMORYMODULE module)
|
||||
{
|
||||
@@ -725,6 +734,10 @@ HMEMORYMODULE MemoryLoadLibraryEx(const void *data, size_t size,
|
||||
goto error;
|
||||
}
|
||||
|
||||
if (!RegisterExceptionHandling(result)) {
|
||||
goto error;
|
||||
}
|
||||
|
||||
// mark memory pages depending on section headers and release
|
||||
// sections that are marked as "discardable"
|
||||
if (!FinalizeSections(result)) {
|
||||
|
||||
Reference in New Issue
Block a user