exlaunch
exlaunch copied to clipboard
Mods made with exlaunch are not compatible with each other.
2 mods are installed, one in subsdk8 and the other, subsdk9.
subsdk8 = Mod A subsdk9 = Mod B
RTLD seems to load Mod B first (Print strings in Mod B are called)
Then, Mod B's exl::hook::Initialize();
is called, causing the game to crash.
Ryujinx gives this error (host memory):
00:00:29.937 |W| HLE.GuestThread.42 KernelSvc : MapProcessMemory() = InvalidSize
Fatal error. System.AccessViolationException: Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
at ARMeilleure.Translation.Translator.Execute(ARMeilleure.State.ExecutionContext, UInt64)
at Ryujinx.Cpu.Jit.JitCpuContext.Execute(Ryujinx.Cpu.IExecutionContext, UInt64)
at Ryujinx.HLE.HOS.ArmProcessContext`1[[System.__Canon, System.Private.CoreLib, Version=7.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].Execute(Ryujinx.Cpu.IExecutionContext, UInt64)
at Ryujinx.HLE.HOS.Kernel.Threading.KThread.ThreadStart()
Ryujinx log with software memory:
00:00:28.952 |W| HLE.GuestThread.42 KernelSvc : MapProcessMemory() = InvalidSize
00:00:28.990 |E| HLE.GuestThread.42 Application : Unhandled exception caught: Ryujinx.Memory.InvalidMemoryRegionException: va=0x6969696969696969, size=0x0000000000000008
at Ryujinx.Cpu.Jit.MemoryManager.Write(UInt64 va, ReadOnlySpan`1 data) in D:\a\Ryujinx\Ryujinx\src\Ryujinx.Cpu\Jit\MemoryManager.cs:line 170
at Ryujinx.Cpu.Jit.MemoryManager.Write[T](UInt64 va, T value) in D:\a\Ryujinx\Ryujinx\src\Ryujinx.Cpu\Jit\MemoryManager.cs:line 164
at ARMeilleure.Instructions.NativeInterface.WriteUInt64(UInt64 address, UInt64 value) in D:\a\Ryujinx\Ryujinx\src\ARMeilleure\Instructions\NativeInterface.cs:line 136
at ARMeilleure.Translation.Translator.Execute(ExecutionContext context, UInt64 address) in D:\a\Ryujinx\Ryujinx\src\ARMeilleure\Translation\Translator.cs:line 155
at Ryujinx.Cpu.Jit.JitCpuContext.Execute(IExecutionContext context, UInt64 address) in D:\a\Ryujinx\Ryujinx\src\Ryujinx.Cpu\Jit\JitCpuContext.cs:line 32
at Ryujinx.HLE.HOS.ArmProcessContext`1.Execute(IExecutionContext context, UInt64 codeAddress) in D:\a\Ryujinx\Ryujinx\src\Ryujinx.HLE\HOS\ArmProcessContext.cs:line 60
at Ryujinx.HLE.HOS.Kernel.Threading.KThread.ThreadStart() in D:\a\Ryujinx\Ryujinx\src\Ryujinx.HLE\HOS\Kernel\Threading\KThread.cs:line 1264
Unhandled exception. Ryujinx.Memory.InvalidMemoryRegionException: va=0x6969696969696969, size=0x0000000000000008
at Ryujinx.Cpu.Jit.MemoryManager.Write(UInt64 va, ReadOnlySpan`1 data) in D:\a\Ryujinx\Ryujinx\src\Ryujinx.Cpu\Jit\MemoryManager.cs:line 170
at Ryujinx.Cpu.Jit.MemoryManager.Write[T](UInt64 va, T value) in D:\a\Ryujinx\Ryujinx\src\Ryujinx.Cpu\Jit\MemoryManager.cs:line 164
at ARMeilleure.Instructions.NativeInterface.WriteUInt64(UInt64 address, UInt64 value) in D:\a\Ryujinx\Ryujinx\src\ARMeilleure\Instructions\NativeInterface.cs:line 136
at ARMeilleure.Translation.Translator.Execute(ExecutionContext context, UInt64 address) in D:\a\Ryujinx\Ryujinx\src\ARMeilleure\Translation\Translator.cs:line 155
at Ryujinx.Cpu.Jit.JitCpuContext.Execute(IExecutionContext context, UInt64 address) in D:\a\Ryujinx\Ryujinx\src\Ryujinx.Cpu\Jit\JitCpuContext.cs:line 32
at Ryujinx.HLE.HOS.ArmProcessContext`1.Execute(IExecutionContext context, UInt64 codeAddress) in D:\a\Ryujinx\Ryujinx\src\Ryujinx.HLE\HOS\ArmProcessContext.cs:line 60
at Ryujinx.HLE.HOS.Kernel.Threading.KThread.ThreadStart() in D:\a\Ryujinx\Ryujinx\src\Ryujinx.HLE\HOS\Kernel\Threading\KThread.cs:line 1264
To test, if Mod B's exl::hook::Initialize();
is commented out, both Mod B and A will load (Of course, Mod B's hooks will not work)
The same behavior is observed if we swap Mod B with Mod A's subsdks.