Merge branch 'develop' of https://github.com/Mikachu2333/Snap.Hutao into develop

This commit is contained in:
LinkChou
2024-06-06 11:48:03 +08:00

View File

@@ -15,30 +15,35 @@ internal readonly struct RequiredLocalModule : IDisposable
public readonly Module UnityPlayer;
public readonly Module UserAssembly;
private readonly HMODULE hModuleUnityPlayer;
private readonly HMODULE hModuleUserAssembly;
[SuppressMessage("", "SH002")]
public RequiredLocalModule(HMODULE unityPlayer, HMODULE userAssembly)
{
hModuleUnityPlayer = unityPlayer;
hModuleUserAssembly = userAssembly;
// Align the pointer
unityPlayer = (nint)(unityPlayer & ~0x3L);
userAssembly = (nint)(userAssembly & ~0x3L);
nint unityPlayerMappedView = (nint)(unityPlayer & ~0x3L);
nint userAssemblyMappedView = (nint)(userAssembly & ~0x3L);
HasValue = true;
UnityPlayer = new((nuint)(nint)unityPlayer, GetImageSize(unityPlayer));
UserAssembly = new((nuint)(nint)userAssembly, GetImageSize(userAssembly));
UnityPlayer = new((nuint)unityPlayerMappedView, GetImageSize(unityPlayerMappedView));
UserAssembly = new((nuint)userAssemblyMappedView, GetImageSize(userAssemblyMappedView));
}
public void Dispose()
{
FreeLibrary((nint)UnityPlayer.Address);
FreeLibrary((nint)UserAssembly.Address);
FreeLibrary(hModuleUnityPlayer);
FreeLibrary(hModuleUserAssembly);
}
[SuppressMessage("", "SH002")]
[MethodImpl(MethodImplOptions.AggressiveInlining)]
private unsafe uint GetImageSize(HMODULE hModule)
private unsafe uint GetImageSize(nint baseAddress)
{
IMAGE_DOS_HEADER* pImageDosHeader = (IMAGE_DOS_HEADER*)(nint)hModule;
IMAGE_NT_HEADERS64* pImageNtHeader = (IMAGE_NT_HEADERS64*)(pImageDosHeader->e_lfanew + hModule);
IMAGE_DOS_HEADER* pImageDosHeader = (IMAGE_DOS_HEADER*)baseAddress;
IMAGE_NT_HEADERS64* pImageNtHeader = (IMAGE_NT_HEADERS64*)(pImageDosHeader->e_lfanew + baseAddress);
return pImageNtHeader->OptionalHeader.SizeOfImage;
}
}