mirror of
https://jihulab.com/DGP-Studio/Snap.Hutao.git
synced 2025-11-19 21:02:53 +08:00
Merge branch 'develop' of https://github.com/Mikachu2333/Snap.Hutao into develop
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user