Added x64 exception handling

This commit is contained in:
DaLynX
2019-02-17 22:47:19 +01:00
committed by Joachim Bauch
parent 5f83e41c3a
commit 18ace52847
+13
View File
@@ -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)) {