#include "il2cpp-config.h"
|
|
#if IL2CPP_TARGET_WINDOWS
|
|
#include "os/Image.h"
|
|
#include "WindowsHeaders.h"
|
|
EXTERN_C IMAGE_DOS_HEADER __ImageBase;
|
|
namespace il2cpp
|
{
|
namespace os
|
{
|
namespace Image
|
{
|
static void InitializeManagedSection()
|
{
|
PIMAGE_NT_HEADERS ntHeaders = (PIMAGE_NT_HEADERS)(((char*)&__ImageBase) + __ImageBase.e_lfanew);
|
PIMAGE_SECTION_HEADER sectionHeader = (PIMAGE_SECTION_HEADER)((char*)&ntHeaders->OptionalHeader + ntHeaders->FileHeader.SizeOfOptionalHeader);
|
for (int i = 0; i < ntHeaders->FileHeader.NumberOfSections; i++)
|
{
|
if (strncmp(IL2CPP_BINARY_SECTION_NAME, (char*)sectionHeader->Name, IMAGE_SIZEOF_SHORT_NAME) == 0)
|
{
|
void* start = (char*)&__ImageBase + sectionHeader->VirtualAddress;
|
void* end = (char*)start + sectionHeader->Misc.VirtualSize;
|
SetManagedSectionStartAndEnd(start, end);
|
}
|
sectionHeader++;
|
}
|
}
|
|
void Initialize()
|
{
|
InitializeManagedSection();
|
}
|
|
void* GetImageBase()
|
{
|
return &__ImageBase;
|
}
|
}
|
}
|
}
|
|
#endif
|